C语言程序报告学生学籍信息管理系统
C语言课程设计
院系:工程学院
&
姓名:刘若愚
学号:606
班号:05205235
指导教师:王老师
日期:2007年9月
:
C语言程序设计报告
第一部分题目要求
程序设计题目:学生学籍信息管理系统设计
…
【要求】
使用下面的数据,设计一个简单的学籍信息管理系统。
学生基本信息文件及其内容:
学号姓名性别宿舍号码电话号码
01 张成成男501
02 李成华女101
03 王成凤女101
04 张明明男502
>
05 陈东男501
06 李果男502
07 张园园女102
…. ………. ….. ……….
学生成绩基本信息文件及其内容:
学号课程编号课程名称学分平时成绩试验成绩卷面成绩
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
…. ….. ……….. …. …. …..
功能要求及说明:
数据录入功能:录入每个学生的学号、课程编号、课程名称、学分、平时成绩、试验成绩、卷面成绩共7个数据。综合成绩、实得分根据条件自动运算。
综合成绩的计算:
如果本课程的试验成绩为-1,则表示无试验,综合成绩=平时成绩*30%+卷面成绩*70%;
如果试验成绩不为-1,表示本课程有试验,综合成绩=平时成绩*15%+试验成绩*15%+卷面成绩*70%。
…
实得学分的计算:采用等级学分制。
综合成绩在90-100之间,应得学分=学分*100%;
综合成绩在80-90之间,应得学分=-学分*80%;
综合成绩在70-80之间,应得学分=学分*75%;
综合成绩在60-70之间,应得学分=学分*60%;
综合成绩在60以下,应得学分=学分*0%。
(2)查询功能;分为学生基本情况查询和成绩查询两种
1》学生基本情况查询:
;
输入一个学生的学号活姓名,查出此生的基本信息并显示输出。
输入一个宿舍号码,可查询出本室所有的学生的基本信息并显示输出。
成绩查询:
输入一个学号时,查询出此生的所有课程情况,格式如下:学号:姓名;
课程编号:课程名称:综合成绩:实得学分:
课程编号:课程名称: 综合成绩: 实得学分:
课程编号; 课程名称: 综合成绩: 实得学分:…
………………………….. …………
共修:XX科,实得总学分为:XXX
删除功能:当在中删除一个学生时,自动地在中删除此人所有的信息
排序功能:能实现选择按综合成绩或实得学分升序或降序排序并显示数据。
第二部分需求分析
|
根据题目要求,由于学生信息是存放在文件中,所以应该提供文件的输入、输出等操作;在程序中要浏览学生的信息,应提供显示、查找、排序等操作;另外还应该提供键盘式选择菜单实现功能选择。
第三部分总体设计
根据上面的需求分析,可以将这个系统的设计分为以下几个模块:
第四部分详细设计
主函数
主函数设计一般要简单,只提供输入,处理和输出部分的函数调用。其中各功能模块用菜单方式选择。
【流程图】
'
[程序]
#include<>
void menu()
{ int n,w;
do{ puts("\t\t**********MENU***********\n\n");
puts("\t ");
puts("\t ");
;
puts("\t ");
puts("\n\n\t\t*************************\n");
printf("Choice your number(1-7):[ ] \b\b\b\b");
scanf("%d",&n);
if(n<1||n>7) /对选择的数字作判断/
{w=1;getchar();}
else w=0;}
while (w==1);
(
switch(n)
{
case 1: browse();break; /浏览模块/
case 2: enter();break; /输入模块/
case 3: search();break; /查找模块/
case 4: browse2();break; /浏览模块/
case 5: enter2();break; /输入模块/
case 6: search2();break; /查找模块/
{
case 7: exit(0);break; /退出/
}}
main()
{ menu();}
2》各功能模块设计
输入模块:先采用结构体数组存储数据
'
struct a
{ int xuehao;
char name[15];
char sex[10];
int shushenum;
int telenum;
}a[10];
struct b
~
{
int xuehao;
int kechenghao;
char kechengming[15];
int xuefen;
int pingshichengji;
int shiyanchengji;
int juanmianchengji;
…
int zonghechengji;
int shidechengji;
}b[10]; a[10].b[10] 中每个数组元素对应一个学生
void jisuan()
{int i, n,n1, n2, n3,n4;
for(i=0;i<10;i++)
{if (b[i].shiyanchengji==-1)
{b[i].zonghechengji=b[i].pingshichengji*+b[i].juanmianchengji*;
break;}
if (b[i].shiyanchengji!=-1)
{b[i].zonghechengji=b[i].pingshichengji*+b[i].juanmianchengji*+b[i].sh iyanchengji*;
break;}
if(b[i].zonghechengji>90&&b[i].zonghechengji<100 )
{n4=b[i].xuefen;
"
b[i].shidechengji=(n4)*(1);
break;}
else if (b[i].zonghechengji>80&&b[i].zonghechengji<90)
{ n3=b[i].xuefen;
b[i].shidechengji=(n3)*;
break;}
else if
(b[i].zonghechengji>70&&b[i].zonghechengji<80) *
{ n2=b[i].xuefen;
b[i].shidechengji=(n2)*;
break;}
else if
(b[i].zonghechengji>60&b[i].zonghechengji<70)
{ n1=b[i].xuefen;
b[i].shidechengji=(n1)*;
break;}
`
else if (b[i].zonghechengji<60)
{n=b[i].xuefen;
b[i].shidechengji=n*0;
break;}
}
} 此简单程序计算综合成绩与实得学分
、
【程序】
enter()
{ int i,n;
printf("How many chengjijibenxinxi datas(0-%d):",10);
scanf("%d",&n);
printf("\n Enter data now \n\n");
for(i=0;i {printf("\nInput %dth chengjijibenxinxi record.\n",i+1); < input(i);} 调用输入函数 if(i!=0) save(n); 调用保存函数 printf_back(); 一个任务结束时让用户选择是浏览还是返回 } 浏览模块: browse() 浏览全部模块 { int i,j,n; n=load(); 加载记录 printf_face(); 调用显示数据结构项目函数 for(i=0;i { if(i%10==0) {printf("\n\nPass any key to contiune..."); 目的是分屏显示 getch(); puts("\n\n");} … printf_one(i); printf("\n"); } 调用显示一个记录的函数 printf("\tThere are %d record.\n",n); printf("\nPass any key to back...."); getch(); 按任意键 menu(); } $ browse2() 该浏览模块的功能是显示所有学生的成绩基本信息 { int i,j,n; n=load2(); printf_face2(); for(i=0;i { if(i%10==0) {printf("\n\nPass any key to contiune..."); getch(); puts("\n\n");} printf_one2(i); , printf("\n"); } printf("\tThere are %d record.\n",n); printf("\nPass any key to back...."); getch(); menu(); } 查找模块; … 该模块的功能是根据输入的学生姓名查找对应的记录,找到以后,增加删除功能。 【流程图】 ; 【程序】 search() 查找学生基本信息的模块 { int i,n,k,w1=1,w2,w3,w4; struct a s; n=load(); do{ do > { k=-1; printf("\n\nEnter number that you want to search! number"); scanf("%d",&; 输入要修改的数据的学号 printf_face(); 调用显示数据结构项目函数 for(i=0;i if==a[i].xuehao) {k=i; printf_one(k);break;} 调用显示一个记录的函数 if(k==-1) ; {printf("\n\nNo exist!please"); printf("\n\nAre you again\n\t 1).Again 2)No and back [ ] \b\b\b "); scanf("%d",&w1);}保证在第一次找的的基础上再查找找不到时能退出 }while(k==-1&&w1==1); 如果W1不等于1时直返回 search2() 查找学生成绩基本信息的模块 { int i,n,k,w1=1,w2,w3,w4; struct a s; n=load2(); — do{ do { k=-1; printf("\n\nEnter number that you want to search! number"); scanf("%d",&; printf_face2(); for(i=0;i if==a[i].xuehao) [ {k=i; printf_one2(k);break;} if(k==-1) {printf("\n\nNo exist!please"); printf("\n\nAre you again\n\t 1).Again 2)No and back [ ] \b\b\b "); scanf("%d",&w1);} }while(k==-1&&w1==1); 删除模块: 该模块的功能是先显示所有学生的信息,考虑到记录的数据较多,建议采用分屏显示 ~ 【程序】 Void del() { } 排序模块: 该功能模块的功能是要求将学生记录的综合成绩或实得 分升序或降序排序并显示数据。假设这里采用选择法排序。 【流程图】 【程序】 Void order() 排序模块 {int I,j,n; Struct student s;n=load(); For(i=0;i , Save(n); Puts(“\n\n ”); Printf_back(); } 设计出的程序如下 > #include<> void menu() { int n,w; do{ puts("\t\t**********MENU***********\n\n"); puts("\t "); puts("\t "); puts("\t "); puts("\n\n\t\t*************************\n"); { printf("Choice your number(1-7):[ ] \b\b\b\b"); scanf("%d",&n); if(n<1||n>7) {w=1;getchar();} else w=0;} while (w==1); switch(n) { % case 1: browse();break; case 2: enter();break; case 3: search();break; case 4: browse2();break; case 5: enter2();break; case 6: search2();break; case 7: exit(0);break; }} | main() { menu();} struct a { int xuehao; char name[15]; char sex[10]; int shushenum; int telenum; ; }a[10]; struct b { int xuehao; int kechenghao; char kechengming[15]; int xuefen; int pingshichengji; — int shiyanchengji; int juanmianchengji; int zonghechengji; int shidechengji; }b[10]; void jisuan() {int i, n,n1, n2, n3,n4; for(i=0;i<10;i++) , {if (b[i].shiyanchengji==-1) {b[i].zonghechengji=b[i].pingshichengji*+b[i].juanmianchengji*; break;} if (b[i].shiyanchengji!=-1) {b[i].zonghechengji=b[i].pingshichengji*+b[i].juanmianchengji*+b[i].sh iyanchengji*; break;} if(b[i].zonghechengji>90&&b[i].zonghechengji<100 ) {n4=b[i].xuefen; 、 b[i].shidechengji=(n4)*(1); break;} else if (b[i].zonghechengji>80&&b[i].zonghechengji<90) { n3=b[i].xuefen; b[i].shidechengji=(n3)*; break;} else if (b[i].zonghechengji>70&&b[i].zonghechengji<80) ] { n2=b[i].xuefen; b[i].shidechengji=(n2)*; break;} else if (b[i].zonghechengji>60&b[i].zonghechengji<70) { n1=b[i].xuefen; b[i].shidechengji=(n1)*; break;} 。 else if (b[i].zonghechengji<60) {n=b[i].xuefen; b[i].shidechengji=n*0; break;} } } enter() { int i,n; , printf("How many chengjijibenxinxi datas(0-%d):",10); scanf("%d",&n); printf("\n Enter data now \n\n"); for(i=0;i {printf("\nInput %dth chengjijibenxinxi record.\n",i+1); input(i);} if(i!=0) save(n); printf_back(); ¥ } browse() { int i,j,n; n=load(); printf_face(); for(i=0;i { if(i%10==0) {printf("\n\nPass any key to contiune..."); getch(); puts("\n\n");} — printf_one(i); printf("\n"); } printf("\tThere are %d record.\n",n); printf("\nPass any key to back...."); getch(); menu(); } 》 search() { int i,n,k,w1=1,w2,w3,w4; struct a s; n=load(); do{ do { k=-1; printf("\n\nEnter number that you want to search! number"); ( scanf("%d",&; printf_face(); for(i=0;i if==a[i].xuehao) {k=i; printf_one(k);break;} if(k==-1) {printf("\n\nNo exist!please"); printf("\n\nAre you again\n\t 1).Again 2)No and back [ ] \b\b\b "); | scanf("%d",&w1);} }while(k==-1&&w1==1); w4=0;w3=0; if(k!=-1) {printf("\n\nWhat do you want to do\n\t another menu [ ] \b\b\b"); scanf("%d",&w2); switch(w2) { case 2:w3=modify(k);break; case 3:{ printf("\nAre you sure\n\t 1).sure 2).No and back [ ] \b\b\b"); : scanf("%d",&w4); if(w4==1) b[k].xuehao=0;b[k].kechenghao=0;strcpy(b[k].kechengming,"xxxx");b[k].xuefen=0;b[k ].pingshichengji=0;b[k].shiyanchengji=0;b[k].juanmianchengji=0; b[k].zonghechengji=0;b[k].shidechengji=0;a[i].xuehao=0;strcpy(a[i].name,"xxxx");strc py(a[i].sex,"xxxx") ;a[i].shushenum=0;a[i].telenum=0; break;} } if(w3==1||w4==1) ; {save(n); printf("\n\nSuccessful."); printf("\n\nWhat do you want to do\n\t 1).Search another 2).Back [ ] \b\b\b"); scanf("%d",&w2);} } } while(w2==1); menu(); } ¥ input (int i) { scanf("%d%d%s%d%d%d%d%d%d",&b[i].xuehao,&b[i].kechenghao,b[i].kechengmin g,&b[i].xuefen,&b[i].pingshichengji,&b[i].shiyanchengji,&b[i].juanmianchengji); jisuan(); } save(int n) { FILE *fp; int i; if((fp=fopen("","wb"))==NULL) / { printf("\nCannot open file\n"); return NULL;} for(i=0;i if(a[i].xuehao!=0) if(fwrite(&b[i],sizeof(struct b),1,fp)!=1) printf("file write error\n"); fclose(fp); } ^ load() { FILE *fp; int i; if((fp=fopen("","rb"))==NULL) {printf("\nCannot open file\n"); return NULL;} for(i=0;!feof(fp);i++) fread(&b[i],sizeof(struct b),1,fp); 【 fclose(fp); return(i-1); } printf_face() { printf("\n\t xuehao kechenghao kechengming xuefen pingshichengji shiyanchengji juanmianchengji zonghechengji shidechengji "); } printf_one(int i) { printf("%5d%5d%15s%5d%5d%5d%5d%5d%5d",b[i].xuehao,b[i].kechenghao,b[i].kec hengming,b[i].xuefen,b[i].pingshichengji,b[i].shiyanchengji, & b[i].juanmianchengji,b[i].zonghechengji,b[i].shidechengji); } printf_back() { int k,w; printf("\n\n\tSuccessful.\n\n"); printf("What do you want to do\n\n\t 1).Browse all now 2).Back;[ ] \b\b\b"); scanf("%d",&w); if(w==1) browse(); ~ else menu(); } modify(int i) { int c,w1=2; do{ puts("\nmodify by=>\n\n"); puts(" 1).xuehao 2).kechenghao 3).kechengming 4).xuefen 5).pingshichengji 6).shiyanchengji 7).juanmianchengji 8)zonghechengji 9)shidechengji 10).all data 11).cancel and back "); printf("Which you needed:[ ] \b\b\b\b"); scanf("%d",&c); — if(c>11||c<1) {puts("\nChoice error!Please again!"); getchar();} }while(c>11||c<1); do { switch(c) {case 1:printf("xuehao:");scanf("%d",&b[i].xuehao);break; case 2:printf("kechenghao:");scanf("%d",&b[i].kechenghao);break; case 3:printf("kechengming:");scanf("%s",b[i].kechengming);break; [ case 4:printf("xuefen:");scanf("%d",&b[i].xuefen);break; case 5:printf("pingshichengji:");scanf("%d",&b[i].pingshichengji);break; case 6:printf("shiyanchengji:");scanf("%d",&b[i].shiyanchengji);break; case 7:printf("juanmianchengji:");scanf("%d",&b[i].juanmianchengji);break; case 8:input(i);break; case 9:menu();break;} puts("\nNow:\n"); printf_face(); — printf_one(i); printf("\nAre you sure\n\n\t 1).Sure 2).No and remodify 3).Back without save in this time [ ] \b\b\b"); scanf("%d",&w1);} while(w1==2); return(w1); } enter2() { int i,n; 】 printf("How many xue sheng ji ben xin xi(0-%d):",10); scanf("%d",&n); printf("\n Enter data now \n\n"); for(i=0;i {printf("\nInput %dth xue sheng ji ben xin xi record.\n",i+1); input2(i);} if(i!=0) save2(n); printf_back2(); 》 } browse2() { int i,j,n; n=load2(); printf_face2(); for(i=0;i { if(i%10==0) {printf("\n\nPass any key to contiune..."); getch(); puts("\n\n");} printf_one2(i); printf("\n"); } printf("\tThere are %d record.\n",n); printf("\nPass any key to back...."); getch(); menu(); } $ search2() { int i,n,k,w1=1,w2,w3,w4; struct a s; n=load2(); do{ do { k=-1; printf("\n\nEnter number that you want to search! number"); ~ scanf("%d",&; printf_face2(); for(i=0;i if==a[i].xuehao) {k=i; printf_one2(k);break;} if(k==-1) {printf("\n\nNo exist!please"); printf("\n\nAre you again\n\t 1).Again 2)No and back [ ] \b\b\b "); — scanf("%d",&w1);} }while(k==-1&&w1==1); w4=0;w3=0; if(k!=-1) {printf("\n\nWhat do you want to do\n\t another menu [ ] \b\b\b"); scanf("%d",&w2); switch(w2) { case 2:w3=modify2(k);break; } … if(w3==1||w4==1) {save2(n); printf("\n\nSuccessful."); printf("\n\nWhat do you want to do\n\t 1).Search another 2).Back [ ] \b\b\b"); scanf("%d",&w2);} } } while(w2==1); menu(); # } input2 (int i) { scanf("%d %s %s %d %d",&a[i].xuehao,a[i].name,a[i].sex,&a[i].shushenum,a[i].telen um); } save2(int n) { FILE *fp; int i; if((fp=fopen("","wb"))==NULL) < { printf("\nCannot open file\n"); return NULL;} for(i=0;i if(a[i].xuehao!=0) if(fwrite(&a[i],sizeof(struct a),1,fp)!=1) printf("file write error\n"); fclose(fp); } … load2() { FILE *fp; int i; if((fp=fopen("","rb"))==NULL) {printf("\nCannot open file\n"); return NULL;} for(i=0;!feof(fp);i++) fread(&a[i],sizeof(struct a),1,fp); fclose(fp); return(i-1); } printf_face2() { printf("\n\t xue sheng ji ben xin xi \n");} printf_one2(int i) { printf("%d%s%s%d%d",a[i].xuehao,a[i].name,a[i].sex,a[i].shushenum,a[i].telenum); } printf_back2() { int k,w; printf("\n\n\tSuccessful.\n\n"); printf("What do you want to do\n\n\t 1).Browse all now 2).Back;[ ] \b\b\b"); scanf("%d",&w); if(w==1) browse2(); else menu(); } modify2(int i) { int c,w1=2; do{ puts("\nmodify by=>\n\n"); puts(" 1).xuehao 2).name 3).sex 4).shushenum 5)telenum 6).all data 7).cancel and back "); printf("Which you needed:[ ] \b\b\b"); scanf("%d",&c); if(c>7||c<1) {puts("\nChoice error!Please again!"); getchar();} }while(c>7||c<1); do { switch(c) {case 1:printf("xuehao:");scanf("%d",&a[i].xuehao);break; case 2:printf("name:");scanf("%s",a[i].name);break; case 3:printf("sex:");scanf("%s",a[i].sex);break; case 4:printf("shushenum:");scanf("%d",&a[i].shushenum);break; case 5:printf("telenum:");scanf("%d",&a[i].telenum);break; case 6:input(i);break; case 7:menu();break;} puts("\nNow:\n"); printf_face2(); printf_one2(i); printf("\nAre you sure\n\n\t 1).Sure 2).No and remodify 3).Back without save in this time [ ] \b\b\b"); scanf("%d",&w1);} while(w1==2); return(w1); } insert2() { int c,i; struct a s;