C 语言课程设计 综合实习报告
题目:学籍信息管理系统 姓名: 黄凯 学号:[1**********] 班级号: 052081 院(系):工程学院 专业: 土木工程 指导教师: 曹弘
一 ,题目要求
1. 学生学籍信息管理系统设计
[要求]
使用下面的数据设计一个简单的学籍管理系统。 学生基本信息文件(A.TXT) 极其内容: 学号 姓名 性别 宿舍号码 电话号码 01 张成成 男 501 87732111 02 李成华 女 101 87723112 03 王成凤 女 101 87723112 04 张明明 男 502 87734333 05 陈东 男 501 87732111 06 李果 男 502 87734333 07 张园园 女 102 87756112
学生成绩基本信息文件(B.TXT )极其内容:
.....................................................................................................................
学号 课程编号 课程名称 学分平时成绩 实验成绩 卷面成绩 综合成绩 实得学分 01 A01 大学物理 3 66 78 82 02 B03 高等数学 4 78 -1 90 01 B03 高等数学 4 45 -1 88 02 C01 VF 3 65 76 66
................................................................................................................ 功能要求极其说明:
(1)数据录入功能:录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据。实得成绩、实得学分根据条件自动运算。 综合成绩的计算:
a. 如果本课程的实验成绩为-1,则表无实验成绩,综合成绩=平时成绩*30%+卷面成绩*70%
b. 如果实验成绩不为-1,表示本课程有实验成绩,综合成绩=平时成绩*15%+实验成绩*15%+卷面成绩*70%
实得学分的计算:采用等级学分制。
综合成绩在90~100之间,应得学分=学分*100% 综合成绩在80~90之间,应得学分=学分*80% 综合成绩在70~80之间,应得学分=学分*75% 综合成绩在60~70之间,应得学分=学分*60% 综合成绩在60分以下,应得学分=学分*0%
(2)查询功能:分为学生基本情况查询和成绩查询两种 学生基本情况查询:
输入一个学号或姓名(可实现选择)查出此学生的基本信息并显示输出。 输入一个宿舍号码,可查出本室所有学生的基本信息并显示输出。 称号查询:
输入一个学号时,查出此学生所有课程情况,格式如下: 学号:XX 课程名称:XXXX 综合成绩:XX 实得学分:XXX
............................................................................... 共修:X 科,实得总分为:XXX
(3) 删除功能:当在A.TXT 中删除一个学生时,自动地在B.TXT 中删除此学生所有信息。
(4)排序功能:能实现选择按综合成绩或实得学分升序或降序排序并显示数据。 [提示]
数据结构采用结构体数组,提供学生基本信息和学生成绩基本信息结构体数组。
二 ,需求分析
根据题目要求,该程序应具备的功能有:
(1)数据录入功能:录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据。实得成绩、实得学分根据条件自动运算。 (2)查询功能:分为学生基本情况查询和成绩查询两种
(3)删除功能:当在A.TXT 中删除一个学生时,自动地在B.TXT 中删除此学生所有信息。 (4)排序功能:能实现选择按综合成绩或实得学分升序或降序排序并显示数据。
三, 程序总体设计
四, 程序详细设计
⒈主函数
主函数一般设计得比较简洁,只提供输入,处理和输出部分的函数调用。其中各功能模块用菜单方式选择。 [流程图] [程序]
void main() { while(1) {
printf("\n>>>>>>>>>>>>>>>>\n\n");
printf("*
========================================================= * \n"); printf("* 1>input 2>cha zhao * \n");
printf("* 3>delete 4>paixu xianshi * \n"); printf("* 5>exit * \n"); printf("* * \n");
printf("* --------------------------------------------------------- * \n"); printf(" Please input which you want(1-5):"); ch=getch(); switch(ch) {
case '1':input();break;
case '2':search(); getch();break; case '3':delete();getch(); break; case '4':sort(); getch();break; case '5':exit(0); default: continue; } } }
⒉个功能模块设计
⑴数据录入。 [数据结构]
我们需要录入的信息数据有两类:一类是学生基本信息,包括学号,学号 姓名 性别 宿舍号码 电话号码,存放在文件S_INFO.TXT中。另一类信息是学生成绩基本信息,包括学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据。实得成绩、
实得学分根据条件自动运算。 这些信息存放在文件S_SCORE.TXT中。 学生基本信息的存放格式为: struct info {
int sMingci; //名次 char xuehao[8]; char name[10]; char sex[2];
char d_num[4]; //宿舍号码 char tel_num[9]; //宿舍电话号码 }data,s_info[100];
成绩基本信息的存放格式为:
struct course {
char xuehao[8];
char course_No[6]; //课程代号 char course_name[10]; //课程名字 float xuefen; //学分 float p_chengji; //平时成绩 float s_chengji; //实验成绩 float j_chengji; //卷面成绩 float z_chengji; //综合成绩 float s_xuefen; //实际学分 }course_data,s_course[100]; [需求分析]
数据录入模块的功能是用户通过输入选项在基本信息和成绩信息的输入之间进行选择。 [程序]
void input() {
while(1) {
printf("\nwhich information do you want to input: b(base) s(socre) e(exit)"); ch=getch();
if(ch=='b'||ch=='B') { if((fp=fopen("s_info.txt","at+"))==NULL) { printf("cannot open this file.\n"); getch();exit(0); }
printf("\nPlease input xuehao:"); gets(sn);
while((fread(&data,sizeof(data),1,fp))==1) { if(strcmp(sn,data.xuehao)==0) { flag=1; } } if(flag==1) { printf("\n the number has exist,press ang key continue:\n"); flag=0; getch(); continue; } else { strcpy(data.xuehao,sn); }
printf("Please input name:"); gets(data.name);
printf("Please input sex:M(male)/F(female):\n"); gets(data.sex);
printf("Please input your dormitory No:"); gets(data.d_num);
printf("Please input telephone Number:"); gets(data.tel_num); fwrite(&data,sizeof(data),1,fp); //写入数据 fclose(fp); } //if
else if(ch=='s'||ch=='S') {
if((fp1=fopen("s_score.txt","at+"))==NULL||(fp=fopen("s_info.txt","rt"))==NULL) { printf("cannot open this file.\n"); getch();exit(0);
} printf("\nPlease input xuehao:"); gets(sn);
while((fread(&data,sizeof(data),1,fp))==1) { if(strcmp(sn,data.xuehao)==0) { flag=1; } } if(!flag)
{ printf("\nthis number is not exist\n"); continue; } else
{ flag=0; strcpy(course_data.xuehao,sn); }
printf("\nPlease input course No:"); gets(course_data.course_No);
printf("\nPlease input course name:"); gets(course_data.course_name);
printf("\nPlease input course xuefeng:"); gets(temp);
course_data.xuefen=atof(temp);
printf("\nPlease input pingshi chengji:"); gets(temp);
course_data.p_chengji=atof(temp);
printf("\nPlease input shiyan chengji:"); gets(temp);
course_data.s_chengji=atof(temp);
printf("\nPlease input juanmian chengji:"); gets(temp);
course_data.j_chengji=atof(temp);
//以下是综合成绩计算
if(course_data.s_chengji==-1) //如果有实验 {
course_data.z_chengji=(course_data.p_chengji)*0.3+(course_data.j_chengji)*0.7;
} else //如果无实验 { course_data.z_chengji=(course_data.p_chengji)*0.15+(course_data.s_chengji)*0.15+(course_data.j_chengji)*0.7; } //以下是实际学分计算 if((course_data.z_chengji)
} //else if else {break; }
printf("another?y/n"); ch=getch(); if(ch=='n'||ch=='N') break; } } //input ⑵查询功能模块。 [需求分析]
该模块的功能分为学生基本情况查询和成绩查询两种。学生基本情况查询是根据输入的学号或姓名查出此学生的基本信息并显示输出;或者根据输入的宿舍号码,查出本室所有学生的基本信息并显示输出。成绩查询的功能是根据输入的学号,查出此学生的所有课程情况。 [流程图]
[程序]
void search() { printf("\n select form: a(student information) b(socre information)"); ch=getch(); if(ch=='a'||ch=='A') { if((fp=fopen("s_info.txt","rt"))==NULL) { printf("\nCannot open this file.\n"); exit(0); } printf("\nselectway: a(student Number) b(student name) c(dormitory NO):\n"); ch1=getch(); //按照学号查找 if(ch1=='a'||ch1=='A') { printf("\nplease input the student number:"); gets(temp_NO); printf(" xuehao name sex sushe hao telephone "); printf("\n------------------------------------------------------------------------------\n");
while((fread(&data,sizeof(data),1,fp))==1) { if(strcmp(temp_NO,data.xuehao)==0) { flag=1; printf("\n%8s%10s%12s%14s%20s\n",data.xuehao,data.name,data.sex,data.d_num,data.tel_num); } } if(!flag) { printf("\nthis number is not exist,press any key to continue\n"); getch(); } else { flag=0; } } //按照名字查找 else if(ch1=='b'||ch1=='B') { printf("\nplease input the name:"); gets(temp_name); printf(" xuehao name sex sushe hao telephone "); printf("\n------------------------------------------------------------------------------\n"); while((fread(&data,sizeof(data),1,fp))==1) { if(strcmp(temp_name,data.name)==0) { flag=1; printf("\n%8s%10s%12s%14s%20s\n",data.xuehao,data.name,data.sex,data.d_num,data.tel_num); } } if(!flag) { printf("\nthis name is not exist,press any key to continue:\n"); getch(); } else
{ flag=0;
}
}
//按照宿舍号码查找
else if(ch1=='c'||ch1=='C')
{
printf("\nplease input the dormitory number:");
gets(temp_dnum);
printf(" xuehao name sex sushe hao telephone ");
printf("\n------------------------------------------------------------------------------\n");
while((fread(&data,sizeof(data),1,fp))==1)
{
if(strcmp(temp_dnum,data.d_num)==0)
{ flag=1;
printf("\n%8s%10s%12s%14s%20s\n",data.xuehao,data.name,data.sex,data.d_num,data.tel_num);
}
if(!flag)
{ printf("this dormitory is not exist,press any key continue:");
getch();
}
else
{
flag=0;
}
}
}
else
{ printf("\nselect error\n");
}
fclose(fp);
} //ch if
//学生成绩查找
else if(ch=='b'||ch=='B')
{
j=0;
z_fen=0;
z_xuefen=0;
if((fp1=fopen("s_score.txt","rt"))==NULL)
{
printf("\nCannot open this file.\n");
exit(0);
}
printf("\nplease input student number:");
gets(temp_NO);
printf(" xuehao course_No course_name xuefen chengji ");
printf("\n------------------------------------------------------------------------------\n");
while((fread(&course_data,sizeof(course_data),1,fp1))==1)
{
if(strcmp(temp_NO,course_data.xuehao)==0)
{ flag=1;
j++;
z_fen=z_fen+course_data.z_chengji;
z_xuefen=z_xuefen+course_data.s_xuefen;
printf("\n%10s%10s%10s%15.1f %18.1f\n",course_data.xuehao,course_data.course_No,course_data.course_name,course_data.s_xuefen,course_data.z_chengji);
}
}
if(!flag)
{ printf(" is not exist");
}
else
{
flag=0;
}
printf("\n------------------------------------------------------------------------------\n"); printf(" z_gong:%3d ke z_xuefen:%3.1f z_cheng ji:%6.1f",j,z_xuefen,z_fen);
}
else
{
printf("error ");
}
fclose(fp1);
}
⑶删除功能模块。
[需求分析]该模块的功能是当在学生基本信息文件中删除一个学生时,自动在成绩信息文件中删除此人的所有信息。
[程序]
void delete()
{
printf("\ninput the number of student you want to delete:");
gets(temp_NO);
if((fp1=fopen("s_score.txt","rt"))==NULL||(fp=fopen("s_info.txt","rt"))==NULL||(fp2=fopen("temp.txt","wt+"))==NULL)
{
printf("cannot open this file.\n");
getch();exit(0);
}
while((fread(&data,sizeof(data),1,fp))==1)
{
if(strcmp(temp_NO,data.xuehao)!=0)
fwrite(&data,sizeof(data),1,fp2);
}
remove("s_info.txt");
rename("temp.txt","s_info.txt");
fclose(fp);
fclose(fp2);
if((fp1=fopen("s_score.txt","rt"))==NULL||(fp2=fopen("temp.txt","wt+"))==NULL) {
printf("cannot open this file.\n");
getch();exit(0);
}
while((fread(&course_data,sizeof(course_data),1,fp1))==1)
{
if(strcmp(temp_NO,course_data.xuehao)!=0)
fwrite(&course_data,sizeof(course_data),1,fp2);
}
remove("s_score.txt");
rename("temp.txt","s_score.txt");
fclose(fp1);
fclose(fp2);
} printf("\n delete successful");
⑷排序功能模块。
[需求分析]
该模块的功能是能实现选择根据综合成绩或实得学分升序或降序排序显示数据。
[流程图]
[程序]
void sort()
{
printf("\nplease input course number:");
gets(tempcn);
if((fp1=fopen("s_score.txt","rt"))==NULL)
{
printf("cannot open this file.\n");
getch();exit(0);
}
i=0;
while((fread(&course_data,sizeof(course_data),1,fp1))==1) {
if(strcmp(tempcn,course_data.course_No)==0) {
s_course[i]=course_data;
i++;
flag=1;
}
}
if(!flag)
{
printf("\nno such course\n");
}
else
{
flag=0;
printf("\nplease select way : a(xuefen) b(zhong he cheng ji)\n");
ch=getch();
printf("\nselect: s(sheng xu) j(jiang xu)"); ch1=getch();
if(ch=='a'||ch=='A') {
//升序排列
if(ch1=='s')
{
for(j=0;j
{
for(k=j;k
{
if(s_course[j].s_xuefen>s_course[k].s_xuefen)
{
temp_course=s_course[j];
s_course[j]=s_course[k];
s_course[k]=temp_course;
}
}
}
printf("\n\nxuehao course_number course_name xuefen chengji\n");
printf("\n----------------------------------------------------------------\n");
for(j=0;j
{
printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);
}
}
//降序排列
else
{
for(j=0;j
{
for(k=j;k
{
if(s_course[j].s_xuefen
{
temp_course=s_course[j];
s_course[j]=s_course[k];
s_course[k]=temp_course;
}
}
}
printf("\n\nxuehao course_number course_name xuefen chengji\n");
printf("\n----------------------------------------------------------------\n");
for(j=0;j
{
printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);
}
} //ch1
} //ch if
else if(ch=='b'||ch=='B')
{
//升序排列
if(ch1=='s'||ch1=='S')
{
for(j=0;j
{
for(k=j;k
{
if(s_course[j].z_chengji>s_course[k].z_chengji)
{
temp_course=s_course[j];
s_course[j]=s_course[k];
s_course[k]=temp_course;
}
}
}
printf("\n\nxuehao
course_number course_name xuefen chengji\n");
printf("\n----------------------------------------------------------------\n");
for(j=0;j
{
printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);
}
}
//降序排列
else
{
for(j=0;j
{
for(k=j;k
{
if(s_course[j].z_chengji
{
temp_course.z_chengji=s_course[j].z_chengji;
s_course[j].z_chengji=s_course[k].z_chengji;
s_course[k].z_chengji=temp_course.z_chengji;
}
}
}
printf("\n\nxuehao course_number course_name xuefen chengji\n");
printf("\n----------------------------------------------------------------\n");
for(j=0;j
{
printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);
}
} //ch1
}
else
{
printf("illegal select");
getch();
}
}
五 ,上机操作
编译、连接和运行
下面是运行后各个模块的界面图: 1 主菜单函数
2. 数据录入
3,查询功能
(1)学生基本信息查询
(2)学生成绩查询
4 删除功能
5 排序功能
源程序:
#include "stdio.h" /*I/O函数*/ #include "stdlib.h" /*其它说明*/ #include "string.h" /*字符串函数*/ #include "conio.h" /*屏幕操作函数*/ #include "memory.h" /*内存操作函数*/ #include "ctype.h" /*字符操作函数*/
#include "malloc.h" /*动态地址分配函数*/
struct course
{
char xuehao[8];
char course_No[6]; //课程代号
char course_name[10]; //课程名字
float xuefen; //学分
float p_chengji; //平时成绩
float s_chengji; //实验成绩
float j_chengji; //卷面成绩
float z_chengji; //综合成绩
float s_xuefen; //实际学分
}course_data,s_course[100];
struct info
{
int sMingci; //名次
char xuehao[8];
char name[10];
char sex[2];
char d_num[4]; //宿舍号码
char tel_num[9]; //宿舍电话号码
}data,s_info[100];
int i,j,k=0;
int a,b;
int flag=0;
char temp[20],ch,ch1,ch2;
char temp_NO[8],temp_name[10],temp_dnum[4];
char tempcn[6];
char sn[8]; //临时学号
float z_fen,z_xuefen;
struct course temp_course;
struct info *inf;
FILE *fp,*fp1,*fp2;
void input()
{
while(1)
{
printf("\nwhich information do you want to input: b(base)
ch=getch();
if(ch=='b'||ch=='B')
{
if((fp=fopen("s_info.txt","at+"))==NULL)
{
printf("cannot open this file.\n"); s(socre) e(exit)");
getch();exit(0);
}
printf("\nPlease input xuehao:");
gets(sn);
while((fread(&data,sizeof(data),1,fp))==1)
{
if(strcmp(sn,data.xuehao)==0)
{
flag=1;
}
}
if(flag==1)
{
printf("\n the number has exist,press ang key continue:\n");
flag=0;
getch();
continue;
}
else
{
strcpy(data.xuehao,sn);
}
printf("Please input name:");
gets(data.name);
printf("Please input sex:M(male)/F(female):\n");
gets(data.sex);
printf("Please input your dormitory No:");
gets(data.d_num);
printf("Please input telephone Number:");
gets(data.tel_num);
fwrite(&data,sizeof(data),1,fp); //写入数据
fclose(fp);
} //if
else if(ch=='s'||ch=='S')
{
if((fp1=fopen("s_score.txt","at+"))==NULL||(fp=fopen("s_info.txt","rt"))==NULL)
{
printf("cannot open this file.\n");
getch();exit(0);
}
printf("\nPlease input xuehao:");
gets(sn);
while((fread(&data,sizeof(data),1,fp))==1)
{
if(strcmp(sn,data.xuehao)==0)
{ flag=1;
}
}
if(!flag)
{ printf("\nthis number is not exist\n");
continue;
}
else
{ flag=0;
strcpy(course_data.xuehao,sn);
}
printf("\nPlease input course No:");
gets(course_data.course_No);
printf("\nPlease input course name:");
gets(course_data.course_name);
printf("\nPlease input course xuefeng:");
gets(temp);
course_data.xuefen=atof(temp);
printf("\nPlease input pingshi chengji:");
gets(temp);
course_data.p_chengji=atof(temp);
printf("\nPlease input shiyan chengji:");
gets(temp);
course_data.s_chengji=atof(temp);
printf("\nPlease input juanmian chengji:");
gets(temp);
course_data.j_chengji=atof(temp);
//以下是综合成绩计算
if(course_data.s_chengji==-1) //如果有实验
{
course_data.z_chengji=(course_data.p_chengji)*0.3+(course_data.j_chengji)*0.7;
}
else //如果无实验
{
course_data.z_chengji=(course_data.p_chengji)*0.15+(course_data.s_chengji)*0.15+(course
_data.j_chengji)*0.7;
}
//以下是实际学分计算
if((course_data.z_chengji)
{course_data.s_xuefen=0;}
else if((course_data.z_chengji)
{course_data.s_xuefen=course_data.xuefen*0.6;}
else if((course_data.z_chengji)
{course_data.s_xuefen=course_data.xuefen*0.75;}
else if((course_data.z_chengji)
{course_data.s_xuefen=course_data.xuefen*0.8;}
else
{course_data.s_xuefen=course_data.xuefen;
}
fwrite(&course_data,sizeof(course_data),1,fp1); //写入数据
fclose(fp1);
fclose(fp);
} //else if
else
{break;
}
printf("another?y/n");
ch=getch();
if(ch=='n'||ch=='N')
break;
}
} //input
void search()
{
printf("\n select form: a(student information) b(socre
information)");
ch=getch();
if(ch=='a'||ch=='A')
{
if((fp=fopen("s_info.txt","rt"))==NULL)
{
printf("\nCannot open this file.\n");
exit(0);
}
printf("\nselectway: a(student Number) b(student name) c(dormitory
NO):\n");
ch1=getch();
//按照学号查找
if(ch1=='a'||ch1=='A')
{
printf("\nplease input the student number:");
gets(temp_NO);
printf(" xuehao name sex sushe hao telephone ");
printf("\n------------------------------------------------------------------------------\n");
while((fread(&data,sizeof(data),1,fp))==1)
{
if(strcmp(temp_NO,data.xuehao)==0)
{ flag=1;
printf("\n%8s%10s%12s%14s%20s\n",data.xuehao,data.name,data.sex,data.d_num,data.tel_n
um);
}
}
if(!flag)
{ printf("\nthis number is not exist,press any key to continue\n");
getch();
} } else { } flag=0;
//按照名字查找
else if(ch1=='b'||ch1=='B')
{
printf("\nplease input the name:");
gets(temp_name);
printf(" xuehao name sex sushe hao telephone ");
printf("\n------------------------------------------------------------------------------\n");
while((fread(&data,sizeof(data),1,fp))==1)
{
if(strcmp(temp_name,data.name)==0)
{ flag=1;
printf("\n%8s%10s%12s%14s%20s\n",data.xuehao,data.name,data.sex,data.d_num,data.tel_num);
}
}
if(!flag)
{ printf("\nthis name is not exist,press any key to continue:\n");
getch();
}
else
{ flag=0;
}
}
//按照宿舍号码查找
else if(ch1=='c'||ch1=='C')
{
printf("\nplease input the dormitory number:");
gets(temp_dnum);
printf(" xuehao name sex sushe hao telephone ");
printf("\n------------------------------------------------------------------------------\n");
while((fread(&data,sizeof(data),1,fp))==1)
{
if(strcmp(temp_dnum,data.d_num)==0)
{ flag=1;
printf("\n%8s%10s%12s%14s%20s\n",data.xuehao,data.name,data.sex,data.d_num,data.tel_num);
}
if(!flag)
{ printf("this dormitory is not exist,press any key continue:");
getch();
}
else
{
flag=0;
}
}
}
else
{ printf("\nselect error\n");
}
fclose(fp);
} //ch if
//学生成绩查找
else if(ch=='b'||ch=='B')
{
j=0;
z_fen=0;
z_xuefen=0;
if((fp1=fopen("s_score.txt","rt"))==NULL)
{
printf("\nCannot open this file.\n");
exit(0);
}
printf("\nplease input student number:");
gets(temp_NO);
printf(" xuehao course_No course_name xuefen chengji ");
printf("\n------------------------------------------------------------------------------\n");
while((fread(&course_data,sizeof(course_data),1,fp1))==1)
{
if(strcmp(temp_NO,course_data.xuehao)==0)
{ flag=1;
j++;
z_fen=z_fen+course_data.z_chengji;
z_xuefen=z_xuefen+course_data.s_xuefen;
printf("\n%10s%10s%10s%15.1f %18.1f\n",course_data.xuehao,course_data.course_No,course_data.course_name,course_data.s_xuefen,course_data.z_chengji);
}
}
if(!flag)
{ printf(" is not exist");
}
else
{
flag=0;
}
printf("\n------------------------------------------------------------------------------\n"); printf(" z_gong:%3d ke z_xuefen:%3.1f z_cheng ji:%6.1f",j,z_xuefen,z_fen);
}
else
{
printf("error ");
}
fclose(fp1);
} //search
void delete()
{
printf("\ninput the number of student you want to delete:");
gets(temp_NO);
if((fp1=fopen("s_score.txt","rt"))==NULL||(fp=fopen("s_info.txt","rt"))==NULL||(fp2=fopen("temp.txt","wt+"))==NULL)
{
printf("cannot open this file.\n");
getch();exit(0);
}
while((fread(&data,sizeof(data),1,fp))==1)
{
if(strcmp(temp_NO,data.xuehao)!=0)
fwrite(&data,sizeof(data),1,fp2);
}
remove("s_info.txt");
rename("temp.txt","s_info.txt");
fclose(fp);
fclose(fp2);
if((fp1=fopen("s_score.txt","rt"))==NULL||(fp2=fopen("temp.txt","wt+"))==NULL) {
printf("cannot open this file.\n");
getch();exit(0);
}
while((fread(&course_data,sizeof(course_data),1,fp1))==1)
{
if(strcmp(temp_NO,course_data.xuehao)!=0)
fwrite(&course_data,sizeof(course_data),1,fp2);
}
remove("s_score.txt");
rename("temp.txt","s_score.txt");
fclose(fp1);
fclose(fp2);
printf("\n delete successful");
}
void sort()
{
printf("\nplease input course number:");
gets(tempcn);
if((fp1=fopen("s_score.txt","rt"))==NULL)
he cheng ji)\n");
{ printf("cannot open this file.\n"); getch();exit(0); } i=0; while((fread(&course_data,sizeof(course_data),1,fp1))==1) { if(strcmp(tempcn,course_data.course_No)==0) { s_course[i]=course_data; i++; flag=1; } } if(!flag) { printf("\nno such course\n"); } else { flag=0; printf("\nplease select way : a(xuefen) b(zhong ch=getch(); printf("\nselect: s(sheng xu) j(jiang xu)"); ch1=getch(); if(ch=='a'||ch=='A') { //升序排列 if(ch1=='s') { for(j=0;j
for(k=j;k
{
if(s_course[j].s_xuefen>s_course[k].s_xuefen)
{
temp_course=s_course[j];
s_course[j]=s_course[k];
s_course[k]=temp_course;
}
}
}
printf("\n\nxuehao course_number course_name xuefen chengji\n");
printf("\n----------------------------------------------------------------\n");
for(j=0;j
{
printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);
}
}
//降序排列
else
{
for(j=0;j
{
for(k=j;k
{
if(s_course[j].s_xuefen
{
temp_course=s_course[j];
s_course[j]=s_course[k];
s_course[k]=temp_course;
}
}
}
printf("\n\nxuehao course_number course_name xuefen chengji\n");
printf("\n----------------------------------------------------------------\n");
for(j=0;j
{
printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);
}
} //ch1
} //ch if
else if(ch=='b'||ch=='B')
{
//升序排列
if(ch1=='s'||ch1=='S')
{
for(j=0;j
{
for(k=j;k
{
if(s_course[j].z_chengji>s_course[k].z_chengji)
{
temp_course=s_course[j];
s_course[j]=s_course[k];
s_course[k]=temp_course;
}
}
}
printf("\n\nxuehao
course_number course_name xuefen chengji\n");
printf("\n----------------------------------------------------------------\n");
for(j=0;j
{
printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);
}
}
//降序排列
else
{
for(j=0;j
{
for(k=j;k
{
if(s_course[j].z_chengji
{
temp_course.z_chengji=s_course[j].z_chengji;
s_course[j].z_chengji=s_course[k].z_chengji;
s_course[k].z_chengji=temp_course.z_chengji;
}
}
}
printf("\n\nxuehao course_number course_name xuefen chengji\n");
printf("\n----------------------------------------------------------------\n");
for(j=0;j
{
printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);
}
} //ch1
}
else
{
printf("illegal select");
getch();
}
}
}
void main()
{
while(1)
{
printf("\n>>>>>>>>>>>>>>>>\n\n");
printf("*
========================================================= * \n"); printf("* 1>input 2>cha zhao * \n");
printf("* 3>delete 4>paixu xianshi * \n");
printf("* 5>exit * \n");
printf("* * \n");
printf("* --------------------------------------------------------- * \n");
printf(" Please input which you want(1-5):");
ch=getch();
switch(ch)
{
case '1':input();break;
case '2':search(); getch();break;
case '3':delete();getch(); break;
case '4':sort(); getch();break;
case '5':exit(0);
default: continue;
}
}
}
六,总结
通过本次的实习,使我掌握了模块化设计方法,理解和运用结构化程序设计的思想和方法。学会了利用 流程图表示算法,提高了利用C 语言进行程序设计能力。
程序设计的过程,实际上是确定解决问题的详细步骤,而这个步骤通常称为流程,然后采用逐步细化的方法实现整个程序。
第一次设计程序,感觉压力很大,很难完成。但通过同学和老师的帮助最终还是完成了自己的程序设计,虽然程序还不是很完美,但能满足题目的各项要求,相信以后再次进行程序设计的时候会得心应手。最后感谢老师这么多天的教诲。谢谢!
C 语言课程设计 综合实习报告
题目:学籍信息管理系统 姓名: 黄凯 学号:[1**********] 班级号: 052081 院(系):工程学院 专业: 土木工程 指导教师: 曹弘
一 ,题目要求
1. 学生学籍信息管理系统设计
[要求]
使用下面的数据设计一个简单的学籍管理系统。 学生基本信息文件(A.TXT) 极其内容: 学号 姓名 性别 宿舍号码 电话号码 01 张成成 男 501 87732111 02 李成华 女 101 87723112 03 王成凤 女 101 87723112 04 张明明 男 502 87734333 05 陈东 男 501 87732111 06 李果 男 502 87734333 07 张园园 女 102 87756112
学生成绩基本信息文件(B.TXT )极其内容:
.....................................................................................................................
学号 课程编号 课程名称 学分平时成绩 实验成绩 卷面成绩 综合成绩 实得学分 01 A01 大学物理 3 66 78 82 02 B03 高等数学 4 78 -1 90 01 B03 高等数学 4 45 -1 88 02 C01 VF 3 65 76 66
................................................................................................................ 功能要求极其说明:
(1)数据录入功能:录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据。实得成绩、实得学分根据条件自动运算。 综合成绩的计算:
a. 如果本课程的实验成绩为-1,则表无实验成绩,综合成绩=平时成绩*30%+卷面成绩*70%
b. 如果实验成绩不为-1,表示本课程有实验成绩,综合成绩=平时成绩*15%+实验成绩*15%+卷面成绩*70%
实得学分的计算:采用等级学分制。
综合成绩在90~100之间,应得学分=学分*100% 综合成绩在80~90之间,应得学分=学分*80% 综合成绩在70~80之间,应得学分=学分*75% 综合成绩在60~70之间,应得学分=学分*60% 综合成绩在60分以下,应得学分=学分*0%
(2)查询功能:分为学生基本情况查询和成绩查询两种 学生基本情况查询:
输入一个学号或姓名(可实现选择)查出此学生的基本信息并显示输出。 输入一个宿舍号码,可查出本室所有学生的基本信息并显示输出。 称号查询:
输入一个学号时,查出此学生所有课程情况,格式如下: 学号:XX 课程名称:XXXX 综合成绩:XX 实得学分:XXX
............................................................................... 共修:X 科,实得总分为:XXX
(3) 删除功能:当在A.TXT 中删除一个学生时,自动地在B.TXT 中删除此学生所有信息。
(4)排序功能:能实现选择按综合成绩或实得学分升序或降序排序并显示数据。 [提示]
数据结构采用结构体数组,提供学生基本信息和学生成绩基本信息结构体数组。
二 ,需求分析
根据题目要求,该程序应具备的功能有:
(1)数据录入功能:录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据。实得成绩、实得学分根据条件自动运算。 (2)查询功能:分为学生基本情况查询和成绩查询两种
(3)删除功能:当在A.TXT 中删除一个学生时,自动地在B.TXT 中删除此学生所有信息。 (4)排序功能:能实现选择按综合成绩或实得学分升序或降序排序并显示数据。
三, 程序总体设计
四, 程序详细设计
⒈主函数
主函数一般设计得比较简洁,只提供输入,处理和输出部分的函数调用。其中各功能模块用菜单方式选择。 [流程图] [程序]
void main() { while(1) {
printf("\n>>>>>>>>>>>>>>>>\n\n");
printf("*
========================================================= * \n"); printf("* 1>input 2>cha zhao * \n");
printf("* 3>delete 4>paixu xianshi * \n"); printf("* 5>exit * \n"); printf("* * \n");
printf("* --------------------------------------------------------- * \n"); printf(" Please input which you want(1-5):"); ch=getch(); switch(ch) {
case '1':input();break;
case '2':search(); getch();break; case '3':delete();getch(); break; case '4':sort(); getch();break; case '5':exit(0); default: continue; } } }
⒉个功能模块设计
⑴数据录入。 [数据结构]
我们需要录入的信息数据有两类:一类是学生基本信息,包括学号,学号 姓名 性别 宿舍号码 电话号码,存放在文件S_INFO.TXT中。另一类信息是学生成绩基本信息,包括学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据。实得成绩、
实得学分根据条件自动运算。 这些信息存放在文件S_SCORE.TXT中。 学生基本信息的存放格式为: struct info {
int sMingci; //名次 char xuehao[8]; char name[10]; char sex[2];
char d_num[4]; //宿舍号码 char tel_num[9]; //宿舍电话号码 }data,s_info[100];
成绩基本信息的存放格式为:
struct course {
char xuehao[8];
char course_No[6]; //课程代号 char course_name[10]; //课程名字 float xuefen; //学分 float p_chengji; //平时成绩 float s_chengji; //实验成绩 float j_chengji; //卷面成绩 float z_chengji; //综合成绩 float s_xuefen; //实际学分 }course_data,s_course[100]; [需求分析]
数据录入模块的功能是用户通过输入选项在基本信息和成绩信息的输入之间进行选择。 [程序]
void input() {
while(1) {
printf("\nwhich information do you want to input: b(base) s(socre) e(exit)"); ch=getch();
if(ch=='b'||ch=='B') { if((fp=fopen("s_info.txt","at+"))==NULL) { printf("cannot open this file.\n"); getch();exit(0); }
printf("\nPlease input xuehao:"); gets(sn);
while((fread(&data,sizeof(data),1,fp))==1) { if(strcmp(sn,data.xuehao)==0) { flag=1; } } if(flag==1) { printf("\n the number has exist,press ang key continue:\n"); flag=0; getch(); continue; } else { strcpy(data.xuehao,sn); }
printf("Please input name:"); gets(data.name);
printf("Please input sex:M(male)/F(female):\n"); gets(data.sex);
printf("Please input your dormitory No:"); gets(data.d_num);
printf("Please input telephone Number:"); gets(data.tel_num); fwrite(&data,sizeof(data),1,fp); //写入数据 fclose(fp); } //if
else if(ch=='s'||ch=='S') {
if((fp1=fopen("s_score.txt","at+"))==NULL||(fp=fopen("s_info.txt","rt"))==NULL) { printf("cannot open this file.\n"); getch();exit(0);
} printf("\nPlease input xuehao:"); gets(sn);
while((fread(&data,sizeof(data),1,fp))==1) { if(strcmp(sn,data.xuehao)==0) { flag=1; } } if(!flag)
{ printf("\nthis number is not exist\n"); continue; } else
{ flag=0; strcpy(course_data.xuehao,sn); }
printf("\nPlease input course No:"); gets(course_data.course_No);
printf("\nPlease input course name:"); gets(course_data.course_name);
printf("\nPlease input course xuefeng:"); gets(temp);
course_data.xuefen=atof(temp);
printf("\nPlease input pingshi chengji:"); gets(temp);
course_data.p_chengji=atof(temp);
printf("\nPlease input shiyan chengji:"); gets(temp);
course_data.s_chengji=atof(temp);
printf("\nPlease input juanmian chengji:"); gets(temp);
course_data.j_chengji=atof(temp);
//以下是综合成绩计算
if(course_data.s_chengji==-1) //如果有实验 {
course_data.z_chengji=(course_data.p_chengji)*0.3+(course_data.j_chengji)*0.7;
} else //如果无实验 { course_data.z_chengji=(course_data.p_chengji)*0.15+(course_data.s_chengji)*0.15+(course_data.j_chengji)*0.7; } //以下是实际学分计算 if((course_data.z_chengji)
} //else if else {break; }
printf("another?y/n"); ch=getch(); if(ch=='n'||ch=='N') break; } } //input ⑵查询功能模块。 [需求分析]
该模块的功能分为学生基本情况查询和成绩查询两种。学生基本情况查询是根据输入的学号或姓名查出此学生的基本信息并显示输出;或者根据输入的宿舍号码,查出本室所有学生的基本信息并显示输出。成绩查询的功能是根据输入的学号,查出此学生的所有课程情况。 [流程图]
[程序]
void search() { printf("\n select form: a(student information) b(socre information)"); ch=getch(); if(ch=='a'||ch=='A') { if((fp=fopen("s_info.txt","rt"))==NULL) { printf("\nCannot open this file.\n"); exit(0); } printf("\nselectway: a(student Number) b(student name) c(dormitory NO):\n"); ch1=getch(); //按照学号查找 if(ch1=='a'||ch1=='A') { printf("\nplease input the student number:"); gets(temp_NO); printf(" xuehao name sex sushe hao telephone "); printf("\n------------------------------------------------------------------------------\n");
while((fread(&data,sizeof(data),1,fp))==1) { if(strcmp(temp_NO,data.xuehao)==0) { flag=1; printf("\n%8s%10s%12s%14s%20s\n",data.xuehao,data.name,data.sex,data.d_num,data.tel_num); } } if(!flag) { printf("\nthis number is not exist,press any key to continue\n"); getch(); } else { flag=0; } } //按照名字查找 else if(ch1=='b'||ch1=='B') { printf("\nplease input the name:"); gets(temp_name); printf(" xuehao name sex sushe hao telephone "); printf("\n------------------------------------------------------------------------------\n"); while((fread(&data,sizeof(data),1,fp))==1) { if(strcmp(temp_name,data.name)==0) { flag=1; printf("\n%8s%10s%12s%14s%20s\n",data.xuehao,data.name,data.sex,data.d_num,data.tel_num); } } if(!flag) { printf("\nthis name is not exist,press any key to continue:\n"); getch(); } else
{ flag=0;
}
}
//按照宿舍号码查找
else if(ch1=='c'||ch1=='C')
{
printf("\nplease input the dormitory number:");
gets(temp_dnum);
printf(" xuehao name sex sushe hao telephone ");
printf("\n------------------------------------------------------------------------------\n");
while((fread(&data,sizeof(data),1,fp))==1)
{
if(strcmp(temp_dnum,data.d_num)==0)
{ flag=1;
printf("\n%8s%10s%12s%14s%20s\n",data.xuehao,data.name,data.sex,data.d_num,data.tel_num);
}
if(!flag)
{ printf("this dormitory is not exist,press any key continue:");
getch();
}
else
{
flag=0;
}
}
}
else
{ printf("\nselect error\n");
}
fclose(fp);
} //ch if
//学生成绩查找
else if(ch=='b'||ch=='B')
{
j=0;
z_fen=0;
z_xuefen=0;
if((fp1=fopen("s_score.txt","rt"))==NULL)
{
printf("\nCannot open this file.\n");
exit(0);
}
printf("\nplease input student number:");
gets(temp_NO);
printf(" xuehao course_No course_name xuefen chengji ");
printf("\n------------------------------------------------------------------------------\n");
while((fread(&course_data,sizeof(course_data),1,fp1))==1)
{
if(strcmp(temp_NO,course_data.xuehao)==0)
{ flag=1;
j++;
z_fen=z_fen+course_data.z_chengji;
z_xuefen=z_xuefen+course_data.s_xuefen;
printf("\n%10s%10s%10s%15.1f %18.1f\n",course_data.xuehao,course_data.course_No,course_data.course_name,course_data.s_xuefen,course_data.z_chengji);
}
}
if(!flag)
{ printf(" is not exist");
}
else
{
flag=0;
}
printf("\n------------------------------------------------------------------------------\n"); printf(" z_gong:%3d ke z_xuefen:%3.1f z_cheng ji:%6.1f",j,z_xuefen,z_fen);
}
else
{
printf("error ");
}
fclose(fp1);
}
⑶删除功能模块。
[需求分析]该模块的功能是当在学生基本信息文件中删除一个学生时,自动在成绩信息文件中删除此人的所有信息。
[程序]
void delete()
{
printf("\ninput the number of student you want to delete:");
gets(temp_NO);
if((fp1=fopen("s_score.txt","rt"))==NULL||(fp=fopen("s_info.txt","rt"))==NULL||(fp2=fopen("temp.txt","wt+"))==NULL)
{
printf("cannot open this file.\n");
getch();exit(0);
}
while((fread(&data,sizeof(data),1,fp))==1)
{
if(strcmp(temp_NO,data.xuehao)!=0)
fwrite(&data,sizeof(data),1,fp2);
}
remove("s_info.txt");
rename("temp.txt","s_info.txt");
fclose(fp);
fclose(fp2);
if((fp1=fopen("s_score.txt","rt"))==NULL||(fp2=fopen("temp.txt","wt+"))==NULL) {
printf("cannot open this file.\n");
getch();exit(0);
}
while((fread(&course_data,sizeof(course_data),1,fp1))==1)
{
if(strcmp(temp_NO,course_data.xuehao)!=0)
fwrite(&course_data,sizeof(course_data),1,fp2);
}
remove("s_score.txt");
rename("temp.txt","s_score.txt");
fclose(fp1);
fclose(fp2);
} printf("\n delete successful");
⑷排序功能模块。
[需求分析]
该模块的功能是能实现选择根据综合成绩或实得学分升序或降序排序显示数据。
[流程图]
[程序]
void sort()
{
printf("\nplease input course number:");
gets(tempcn);
if((fp1=fopen("s_score.txt","rt"))==NULL)
{
printf("cannot open this file.\n");
getch();exit(0);
}
i=0;
while((fread(&course_data,sizeof(course_data),1,fp1))==1) {
if(strcmp(tempcn,course_data.course_No)==0) {
s_course[i]=course_data;
i++;
flag=1;
}
}
if(!flag)
{
printf("\nno such course\n");
}
else
{
flag=0;
printf("\nplease select way : a(xuefen) b(zhong he cheng ji)\n");
ch=getch();
printf("\nselect: s(sheng xu) j(jiang xu)"); ch1=getch();
if(ch=='a'||ch=='A') {
//升序排列
if(ch1=='s')
{
for(j=0;j
{
for(k=j;k
{
if(s_course[j].s_xuefen>s_course[k].s_xuefen)
{
temp_course=s_course[j];
s_course[j]=s_course[k];
s_course[k]=temp_course;
}
}
}
printf("\n\nxuehao course_number course_name xuefen chengji\n");
printf("\n----------------------------------------------------------------\n");
for(j=0;j
{
printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);
}
}
//降序排列
else
{
for(j=0;j
{
for(k=j;k
{
if(s_course[j].s_xuefen
{
temp_course=s_course[j];
s_course[j]=s_course[k];
s_course[k]=temp_course;
}
}
}
printf("\n\nxuehao course_number course_name xuefen chengji\n");
printf("\n----------------------------------------------------------------\n");
for(j=0;j
{
printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);
}
} //ch1
} //ch if
else if(ch=='b'||ch=='B')
{
//升序排列
if(ch1=='s'||ch1=='S')
{
for(j=0;j
{
for(k=j;k
{
if(s_course[j].z_chengji>s_course[k].z_chengji)
{
temp_course=s_course[j];
s_course[j]=s_course[k];
s_course[k]=temp_course;
}
}
}
printf("\n\nxuehao
course_number course_name xuefen chengji\n");
printf("\n----------------------------------------------------------------\n");
for(j=0;j
{
printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);
}
}
//降序排列
else
{
for(j=0;j
{
for(k=j;k
{
if(s_course[j].z_chengji
{
temp_course.z_chengji=s_course[j].z_chengji;
s_course[j].z_chengji=s_course[k].z_chengji;
s_course[k].z_chengji=temp_course.z_chengji;
}
}
}
printf("\n\nxuehao course_number course_name xuefen chengji\n");
printf("\n----------------------------------------------------------------\n");
for(j=0;j
{
printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);
}
} //ch1
}
else
{
printf("illegal select");
getch();
}
}
五 ,上机操作
编译、连接和运行
下面是运行后各个模块的界面图: 1 主菜单函数
2. 数据录入
3,查询功能
(1)学生基本信息查询
(2)学生成绩查询
4 删除功能
5 排序功能
源程序:
#include "stdio.h" /*I/O函数*/ #include "stdlib.h" /*其它说明*/ #include "string.h" /*字符串函数*/ #include "conio.h" /*屏幕操作函数*/ #include "memory.h" /*内存操作函数*/ #include "ctype.h" /*字符操作函数*/
#include "malloc.h" /*动态地址分配函数*/
struct course
{
char xuehao[8];
char course_No[6]; //课程代号
char course_name[10]; //课程名字
float xuefen; //学分
float p_chengji; //平时成绩
float s_chengji; //实验成绩
float j_chengji; //卷面成绩
float z_chengji; //综合成绩
float s_xuefen; //实际学分
}course_data,s_course[100];
struct info
{
int sMingci; //名次
char xuehao[8];
char name[10];
char sex[2];
char d_num[4]; //宿舍号码
char tel_num[9]; //宿舍电话号码
}data,s_info[100];
int i,j,k=0;
int a,b;
int flag=0;
char temp[20],ch,ch1,ch2;
char temp_NO[8],temp_name[10],temp_dnum[4];
char tempcn[6];
char sn[8]; //临时学号
float z_fen,z_xuefen;
struct course temp_course;
struct info *inf;
FILE *fp,*fp1,*fp2;
void input()
{
while(1)
{
printf("\nwhich information do you want to input: b(base)
ch=getch();
if(ch=='b'||ch=='B')
{
if((fp=fopen("s_info.txt","at+"))==NULL)
{
printf("cannot open this file.\n"); s(socre) e(exit)");
getch();exit(0);
}
printf("\nPlease input xuehao:");
gets(sn);
while((fread(&data,sizeof(data),1,fp))==1)
{
if(strcmp(sn,data.xuehao)==0)
{
flag=1;
}
}
if(flag==1)
{
printf("\n the number has exist,press ang key continue:\n");
flag=0;
getch();
continue;
}
else
{
strcpy(data.xuehao,sn);
}
printf("Please input name:");
gets(data.name);
printf("Please input sex:M(male)/F(female):\n");
gets(data.sex);
printf("Please input your dormitory No:");
gets(data.d_num);
printf("Please input telephone Number:");
gets(data.tel_num);
fwrite(&data,sizeof(data),1,fp); //写入数据
fclose(fp);
} //if
else if(ch=='s'||ch=='S')
{
if((fp1=fopen("s_score.txt","at+"))==NULL||(fp=fopen("s_info.txt","rt"))==NULL)
{
printf("cannot open this file.\n");
getch();exit(0);
}
printf("\nPlease input xuehao:");
gets(sn);
while((fread(&data,sizeof(data),1,fp))==1)
{
if(strcmp(sn,data.xuehao)==0)
{ flag=1;
}
}
if(!flag)
{ printf("\nthis number is not exist\n");
continue;
}
else
{ flag=0;
strcpy(course_data.xuehao,sn);
}
printf("\nPlease input course No:");
gets(course_data.course_No);
printf("\nPlease input course name:");
gets(course_data.course_name);
printf("\nPlease input course xuefeng:");
gets(temp);
course_data.xuefen=atof(temp);
printf("\nPlease input pingshi chengji:");
gets(temp);
course_data.p_chengji=atof(temp);
printf("\nPlease input shiyan chengji:");
gets(temp);
course_data.s_chengji=atof(temp);
printf("\nPlease input juanmian chengji:");
gets(temp);
course_data.j_chengji=atof(temp);
//以下是综合成绩计算
if(course_data.s_chengji==-1) //如果有实验
{
course_data.z_chengji=(course_data.p_chengji)*0.3+(course_data.j_chengji)*0.7;
}
else //如果无实验
{
course_data.z_chengji=(course_data.p_chengji)*0.15+(course_data.s_chengji)*0.15+(course
_data.j_chengji)*0.7;
}
//以下是实际学分计算
if((course_data.z_chengji)
{course_data.s_xuefen=0;}
else if((course_data.z_chengji)
{course_data.s_xuefen=course_data.xuefen*0.6;}
else if((course_data.z_chengji)
{course_data.s_xuefen=course_data.xuefen*0.75;}
else if((course_data.z_chengji)
{course_data.s_xuefen=course_data.xuefen*0.8;}
else
{course_data.s_xuefen=course_data.xuefen;
}
fwrite(&course_data,sizeof(course_data),1,fp1); //写入数据
fclose(fp1);
fclose(fp);
} //else if
else
{break;
}
printf("another?y/n");
ch=getch();
if(ch=='n'||ch=='N')
break;
}
} //input
void search()
{
printf("\n select form: a(student information) b(socre
information)");
ch=getch();
if(ch=='a'||ch=='A')
{
if((fp=fopen("s_info.txt","rt"))==NULL)
{
printf("\nCannot open this file.\n");
exit(0);
}
printf("\nselectway: a(student Number) b(student name) c(dormitory
NO):\n");
ch1=getch();
//按照学号查找
if(ch1=='a'||ch1=='A')
{
printf("\nplease input the student number:");
gets(temp_NO);
printf(" xuehao name sex sushe hao telephone ");
printf("\n------------------------------------------------------------------------------\n");
while((fread(&data,sizeof(data),1,fp))==1)
{
if(strcmp(temp_NO,data.xuehao)==0)
{ flag=1;
printf("\n%8s%10s%12s%14s%20s\n",data.xuehao,data.name,data.sex,data.d_num,data.tel_n
um);
}
}
if(!flag)
{ printf("\nthis number is not exist,press any key to continue\n");
getch();
} } else { } flag=0;
//按照名字查找
else if(ch1=='b'||ch1=='B')
{
printf("\nplease input the name:");
gets(temp_name);
printf(" xuehao name sex sushe hao telephone ");
printf("\n------------------------------------------------------------------------------\n");
while((fread(&data,sizeof(data),1,fp))==1)
{
if(strcmp(temp_name,data.name)==0)
{ flag=1;
printf("\n%8s%10s%12s%14s%20s\n",data.xuehao,data.name,data.sex,data.d_num,data.tel_num);
}
}
if(!flag)
{ printf("\nthis name is not exist,press any key to continue:\n");
getch();
}
else
{ flag=0;
}
}
//按照宿舍号码查找
else if(ch1=='c'||ch1=='C')
{
printf("\nplease input the dormitory number:");
gets(temp_dnum);
printf(" xuehao name sex sushe hao telephone ");
printf("\n------------------------------------------------------------------------------\n");
while((fread(&data,sizeof(data),1,fp))==1)
{
if(strcmp(temp_dnum,data.d_num)==0)
{ flag=1;
printf("\n%8s%10s%12s%14s%20s\n",data.xuehao,data.name,data.sex,data.d_num,data.tel_num);
}
if(!flag)
{ printf("this dormitory is not exist,press any key continue:");
getch();
}
else
{
flag=0;
}
}
}
else
{ printf("\nselect error\n");
}
fclose(fp);
} //ch if
//学生成绩查找
else if(ch=='b'||ch=='B')
{
j=0;
z_fen=0;
z_xuefen=0;
if((fp1=fopen("s_score.txt","rt"))==NULL)
{
printf("\nCannot open this file.\n");
exit(0);
}
printf("\nplease input student number:");
gets(temp_NO);
printf(" xuehao course_No course_name xuefen chengji ");
printf("\n------------------------------------------------------------------------------\n");
while((fread(&course_data,sizeof(course_data),1,fp1))==1)
{
if(strcmp(temp_NO,course_data.xuehao)==0)
{ flag=1;
j++;
z_fen=z_fen+course_data.z_chengji;
z_xuefen=z_xuefen+course_data.s_xuefen;
printf("\n%10s%10s%10s%15.1f %18.1f\n",course_data.xuehao,course_data.course_No,course_data.course_name,course_data.s_xuefen,course_data.z_chengji);
}
}
if(!flag)
{ printf(" is not exist");
}
else
{
flag=0;
}
printf("\n------------------------------------------------------------------------------\n"); printf(" z_gong:%3d ke z_xuefen:%3.1f z_cheng ji:%6.1f",j,z_xuefen,z_fen);
}
else
{
printf("error ");
}
fclose(fp1);
} //search
void delete()
{
printf("\ninput the number of student you want to delete:");
gets(temp_NO);
if((fp1=fopen("s_score.txt","rt"))==NULL||(fp=fopen("s_info.txt","rt"))==NULL||(fp2=fopen("temp.txt","wt+"))==NULL)
{
printf("cannot open this file.\n");
getch();exit(0);
}
while((fread(&data,sizeof(data),1,fp))==1)
{
if(strcmp(temp_NO,data.xuehao)!=0)
fwrite(&data,sizeof(data),1,fp2);
}
remove("s_info.txt");
rename("temp.txt","s_info.txt");
fclose(fp);
fclose(fp2);
if((fp1=fopen("s_score.txt","rt"))==NULL||(fp2=fopen("temp.txt","wt+"))==NULL) {
printf("cannot open this file.\n");
getch();exit(0);
}
while((fread(&course_data,sizeof(course_data),1,fp1))==1)
{
if(strcmp(temp_NO,course_data.xuehao)!=0)
fwrite(&course_data,sizeof(course_data),1,fp2);
}
remove("s_score.txt");
rename("temp.txt","s_score.txt");
fclose(fp1);
fclose(fp2);
printf("\n delete successful");
}
void sort()
{
printf("\nplease input course number:");
gets(tempcn);
if((fp1=fopen("s_score.txt","rt"))==NULL)
he cheng ji)\n");
{ printf("cannot open this file.\n"); getch();exit(0); } i=0; while((fread(&course_data,sizeof(course_data),1,fp1))==1) { if(strcmp(tempcn,course_data.course_No)==0) { s_course[i]=course_data; i++; flag=1; } } if(!flag) { printf("\nno such course\n"); } else { flag=0; printf("\nplease select way : a(xuefen) b(zhong ch=getch(); printf("\nselect: s(sheng xu) j(jiang xu)"); ch1=getch(); if(ch=='a'||ch=='A') { //升序排列 if(ch1=='s') { for(j=0;j
for(k=j;k
{
if(s_course[j].s_xuefen>s_course[k].s_xuefen)
{
temp_course=s_course[j];
s_course[j]=s_course[k];
s_course[k]=temp_course;
}
}
}
printf("\n\nxuehao course_number course_name xuefen chengji\n");
printf("\n----------------------------------------------------------------\n");
for(j=0;j
{
printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);
}
}
//降序排列
else
{
for(j=0;j
{
for(k=j;k
{
if(s_course[j].s_xuefen
{
temp_course=s_course[j];
s_course[j]=s_course[k];
s_course[k]=temp_course;
}
}
}
printf("\n\nxuehao course_number course_name xuefen chengji\n");
printf("\n----------------------------------------------------------------\n");
for(j=0;j
{
printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);
}
} //ch1
} //ch if
else if(ch=='b'||ch=='B')
{
//升序排列
if(ch1=='s'||ch1=='S')
{
for(j=0;j
{
for(k=j;k
{
if(s_course[j].z_chengji>s_course[k].z_chengji)
{
temp_course=s_course[j];
s_course[j]=s_course[k];
s_course[k]=temp_course;
}
}
}
printf("\n\nxuehao
course_number course_name xuefen chengji\n");
printf("\n----------------------------------------------------------------\n");
for(j=0;j
{
printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);
}
}
//降序排列
else
{
for(j=0;j
{
for(k=j;k
{
if(s_course[j].z_chengji
{
temp_course.z_chengji=s_course[j].z_chengji;
s_course[j].z_chengji=s_course[k].z_chengji;
s_course[k].z_chengji=temp_course.z_chengji;
}
}
}
printf("\n\nxuehao course_number course_name xuefen chengji\n");
printf("\n----------------------------------------------------------------\n");
for(j=0;j
{
printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);
}
} //ch1
}
else
{
printf("illegal select");
getch();
}
}
}
void main()
{
while(1)
{
printf("\n>>>>>>>>>>>>>>>>\n\n");
printf("*
========================================================= * \n"); printf("* 1>input 2>cha zhao * \n");
printf("* 3>delete 4>paixu xianshi * \n");
printf("* 5>exit * \n");
printf("* * \n");
printf("* --------------------------------------------------------- * \n");
printf(" Please input which you want(1-5):");
ch=getch();
switch(ch)
{
case '1':input();break;
case '2':search(); getch();break;
case '3':delete();getch(); break;
case '4':sort(); getch();break;
case '5':exit(0);
default: continue;
}
}
}
六,总结
通过本次的实习,使我掌握了模块化设计方法,理解和运用结构化程序设计的思想和方法。学会了利用 流程图表示算法,提高了利用C 语言进行程序设计能力。
程序设计的过程,实际上是确定解决问题的详细步骤,而这个步骤通常称为流程,然后采用逐步细化的方法实现整个程序。
第一次设计程序,感觉压力很大,很难完成。但通过同学和老师的帮助最终还是完成了自己的程序设计,虽然程序还不是很完美,但能满足题目的各项要求,相信以后再次进行程序设计的时候会得心应手。最后感谢老师这么多天的教诲。谢谢!