C语言程序报告 学生学籍信息管理系统.docx
《C语言程序报告 学生学籍信息管理系统.docx》由会员分享,可在线阅读,更多相关《C语言程序报告 学生学籍信息管理系统.docx(30页珍藏版)》请在冰豆网上搜索。
C语言程序报告学生学籍信息管理系统
C语言课程设计
院系:
工程学院
姓名:
***
学号:
***********
班号:
05205235
指导教师:
***
日期:
2007年9月
C语言程序设计报告
第一部分题目要求
程序设计题目:
学生学籍信息管理系统设计
【要求】
使用下面的数据,设计一个简单的学籍信息管理系统。
学生基本信息文件(A.TXT)及其内容:
学号姓名性别宿舍号码电话号码
01张成成男50187732111
02李成华女10187723112
03王成凤女10187723112
04张明明男50287734333
05陈东男50187732111
06李果男50287734333
07张园园女10287756122
….……….…..……….
学生成绩基本信息文件(B.TXT)及其内容:
学号课程编号课程名称学分平时成绩试验成绩卷面成绩
01A01大学物理3667882
02B03高等数学478-190
01B03高等数学445-188
02C01VF3657666
….…..………..….….…..
功能要求及说明:
数据录入功能:
录入每个学生的学号、课程编号、课程名称、学分、平时成绩、试验成绩、卷面成绩共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
删除功能:
当在A.TXT中删除一个学生时,自动地在B.TXT中删除此人所有的信息
排序功能:
能实现选择按综合成绩或实得学分升序或降序排序并显示数据。
第二部分需求分析
根据题目要求,由于学生信息是存放在文件中,所以应该提供文件的输入、输出等操作;在程序中要浏览学生的信息,应提供显示、查找、排序等操作;另外还应该提供键盘式选择菜单实现功能选择。
第三部分总体设计
根据上面的需求分析,可以将这个系统的设计分为以下几个模块:
第四部分详细设计
主函数
主函数设计一般要简单,只提供输入,处理和输出部分的函数调用。
其中各功能模块用菜单方式选择。
【流程图】
[程序]
#include
voidmenu()
{intn,w;
do{puts("\t\t**********MENU***********\n\n");
puts("\t1.browse2.enter3.Search");
puts("\t4.browse25.enter26.Search2");
puts("\t7.exit");
puts("\n\n\t\t*************************\n");
printf("Choiceyournumber(1-7):
[]\b\b\b\b");
scanf("%d",&n);
if(n<1||n>7)/对选择的数字作判断/
{w=1;getchar();}
elsew=0;}
while(w==1);
switch(n)
{
case1:
browse();break;/浏览模块/
case2:
enter();break;/输入模块/
case3:
search();break;/查找模块/
case4:
browse2();break;/浏览模块/
case5:
enter2();break;/输入模块/
case6:
search2();break;/查找模块/
case7:
exit(0);break;/退出/
}}
main()
{menu();}
2》各功能模块设计
输入模块:
先采用结构体数组存储数据
structa
{intxuehao;
charname[15];
charsex[10];
intshushenum;
inttelenum;
}a[10];
structb
{
intxuehao;
intkechenghao;
charkechengming[15];
intxuefen;
intpingshichengji;
intshiyanchengji;
intjuanmianchengji;
intzonghechengji;
intshidechengji;
}b[10];a[10].b[10]中每个数组元素对应一个学生
voidjisuan()
{inti,n,n1,n2,n3,n4;
for(i=0;i<10;i++)
{if(b[i].shiyanchengji==-1)
{b[i].zonghechengji=b[i].pingshichengji*0.3+b[i].juanmianchengji*0.7;
break;}
if(b[i].shiyanchengji!
=-1)
{b[i].zonghechengji=b[i].pingshichengji*0.15+b[i].juanmianchengji*0.7+b[i].shiyanchengji*0.15;
break;}
if(b[i].zonghechengji>90&&b[i].zonghechengji<100)
{n4=b[i].xuefen;
b[i].shidechengji=(n4)*
(1);
break;}
elseif(b[i].zonghechengji>80&&b[i].zonghechengji<90)
{n3=b[i].xuefen;
b[i].shidechengji=(n3)*0.9;
break;}
elseif
(b[i].zonghechengji>70&&b[i].zonghechengji<80)
{n2=b[i].xuefen;
b[i].shidechengji=(n2)*0.8;
break;}
elseif
(b[i].zonghechengji>60&b[i].zonghechengji<70)
{n1=b[i].xuefen;
b[i].shidechengji=(n1)*0.7;
break;}
elseif(b[i].zonghechengji<60)
{n=b[i].xuefen;
b[i].shidechengji=n*0;
break;}
}
}此简单程序计算综合成绩与实得学分
【程序】
enter()
{inti,n;
printf("Howmanychengjijibenxinxidatas(0-%d)?
:
",10);
scanf("%d",&n);
printf("\nEnterdatanow\n\n");
for(i=0;i{printf("\nInput%dthchengjijibenxinxirecord.\n",i+1);
input(i);}调用输入函数
if(i!
=0)save(n);调用保存函数
printf_back();一个任务结束时让用户选择是浏览还是返回
}
浏览模块:
该模块的功能是显示所有学生记录信息。
【流程图】
【程序】
browse()浏览全部模块
{inti,j,n;
n=load();加载记录
printf_face();调用显示数据结构项目函数
for(i=0;i{if(i%10==0){printf("\n\nPassanykeytocontiune...");目的是分屏显示
getch();puts("\n\n");}
printf_one(i);
printf("\n");
}调用显示一个记录的函数
printf("\tThereare%drecord.\n",n);
printf("\nPassanykeytoback....");
getch();按任意键
menu();
}
browse2()该浏览模块的功能是显示所有学生的成绩基本信息
{inti,j,n;
n=load2();
printf_face2();
for(i=0;i{if(i%10==0){printf("\n\nPassanykeytocontiune...");
getch();puts("\n\n");}
printf_one2(i);
printf("\n");
}
printf("\tThereare%drecord.\n",n);
printf("\nPassanykeytoback....");
getch();
menu();
}
查找模块;
该模块的功能是根据输入的学生姓名查找对应的记录,找到以后,增加删除功能。
【流程图】
【程序】
search()查找学生基本信息的模块
{inti,n,k,w1=1,w2,w3,w4;
structas;
n=load();
do{
do
{k=-1;
printf("\n\nEnternumberthatyouwanttosearch!
number");
scanf("%d",&s.xuehao);输入要修改的数据的学号
printf_face();调用显示数据结构项目函数
for(i=0;iif(s.xuehao==a[i].xuehao)
{k=i;printf_one(k);break;}调用显示一个记录的函数
if(k==-1)
{printf("\n\nNoexist!
please");
printf("\n\nAreyouagain?
\n\t1).Again2)Noandback[]\b\b\b");
scanf("%d",&w1);}保证在第一次找的的基础上再查找找不到时能退出
}while(k==-1&&w1==1);如果W1不等于1时直返回
search2()查找学生成绩基本信息的模块
{inti,n,k,w1=1,w2,w3,w4;
structas;
n=load2();
do{
do
{k=-1;
printf("\n\nEnternumberthatyouwanttosearch!
number");
scanf("%d",&s.xuehao);
printf_face2();
for(i=0;iif(s.xuehao==a[i].xuehao)
{k=i;printf_one2(k);break;}
if(k==-1)
{printf("\n\nNoexist!
please");
printf("\n\nAreyouagain?
\n\t1).Again2)Noandback[]\b\b\b");
scanf("%d",&w1);}
}while(k==-1&&w1==1);
删除模块:
该模块的功能是先显示所有学生的信息,考虑到记录的数据较多,建议采用分屏显示
【程序】
Voiddel()
{
}
排序模块:
该功能模块的功能是要求将学生记录的综合成绩或实得分升序或降序排序并显示数据。
假设这里采用选择法排序。
【流程图】
【程序】
Voidorder()排序模块
{intI,j,n;
Structstudents;n=load();
For(i=0;i{
}
Save(n);
Puts(“\n\n”);
Printf_back();
}
设计出的程序如下
#include
voidmenu()
{intn,w;
do{puts("\t\t**********MENU***********\n\n");
puts("\t1.browse2.enter3.Search");
puts("\t4.browse25.enter26.Search2");
puts("\t7.exit");
puts("\n\n\t\t*************************\n");
printf("Choiceyournumber(1-7):
[]\b\b\b\b");
scanf("%d",&n);
if(n<1||n>7)
{w=1;getchar();}
elsew=0;}
while(w==1);
switch(n)
{
case1:
browse();break;
case2:
enter();break;
case3:
search();break;
case4:
browse2();break;
case5:
enter2();break;
case6:
search2();break;
case7:
exit(0);break;
}}
main()
{menu();}
structa
{intxuehao;
charname[15];
charsex[10];
intshushenum;
inttelenum;
}a[10];
structb
{
intxuehao;
intkechenghao;
charkechengming[15];
intxuefen;
intpingshichengji;
intshiyanchengji;
intjuanmianchengji;
intzonghechengji;
intshidechengji;
}b[10];
voidjisuan()
{inti,n,n1,n2,n3,n4;
for(i=0;i<10;i++)
{if(b[i].shiyanchengji==-1)
{b[i].zonghechengji=b[i].pingshichengji*0.3+b[i].juanmianchengji*0.7;
break;}
if(b[i].shiyanchengji!
=-1)
{b[i].zonghechengji=b[i].pingshichengji*0.15+b[i].juanmianchengji*0.7+b[i].shiyanchengji*0.15;
break;}
if(b[i].zonghechengji>90&&b[i].zonghechengji<100)
{n4=b[i].xuefen;
b[i].shidechengji=(n4)*
(1);
break;}
elseif(b[i].zonghechengji>80&&b[i].zonghechengji<90)
{n3=b[i].xuefen;
b[i].shidechengji=(n3)*0.9;
break;}
elseif
(b[i].zonghechengji>70&&b[i].zonghechengji<80)
{n2=b[i].xuefen;
b[i].shidechengji=(n2)*0.8;
break;}
elseif
(b[i].zonghechengji>60&b[i].zonghechengji<70)
{n1=b[i].xuefen;
b[i].shidechengji=(n1)*0.7;
break;}
elseif(b[i].zonghechengji<60)
{n=b[i].xuefen;
b[i].shidechengji=n*0;
break;}
}
}
enter()
{inti,n;
printf("Howmanychengjijibenxinxidatas(0-%d)?
:
",10);
scanf("%d",&n);
printf("\nEnterdatanow\n\n");
for(i=0;i{printf("\nInput%dthchengjijibenxinxirecord.\n",i+1);
input(i);}
if(i!
=0)save(n);
printf_back();
}
browse()
{inti,j,n;
n=load();
printf_face();
for(i=0;i{if(i%10==0){printf("\n\nPassanykeytocontiune...");
getch();puts("\n\n");}
printf_one(i);
printf("\n");
}
printf("\tThereare%drecord.\n",n);
printf("\nPassanykeytoback....");
getch();
menu();
}
search()
{inti,n,k,w1=1,w2,w3,w4;
structas;
n=load();
do{
do
{k=-1;
printf("\n\nEnternumberthatyouwanttosearch!
number");
scanf("%d",&s.xuehao);
printf_face();
for(i=0;iif(s.xuehao==a[i].xuehao)
{k=i;printf_one(k);break;}
if(k==-1)
{printf("\n\nNoexist!
please");
printf("\n\nAreyouagain?
\n\t1).Again2)Noandback[]\b\b\b");
scanf("%d",&w1);}
}while(k==-1&&w1==1);
w4=0;w3=0;
if(k!
=-1){printf("\n\nWhatdoyouwanttodo?
\n\t1.Searchanother2.Modify3.Delete4.Backmenu[]\b\b\b");
scanf("%d",&w2);
switch(w2)
{case2:
w3=modify(k);break;
case3:
{printf("\nAreyousure?
\n\t1).sure2).Noandback[]\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");strcpy(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\nWhatdoyouwanttodo?
\n\t1).Searchanother2).Back[]\b\b\b");
scanf("%d",&w2);}
}
}while(w2==1);
menu();
}
input(inti)
{scanf("%d%d%s%d%d%d%d%d%d",&b[i].xuehao,&b[i].kechenghao,b[i].kechengming,&b[i].xuefen,&b[i].pingshichengji,&b[i].shiyanchengji,&b[i].juanmianchengji);
jisuan();
}
save(intn)
{FILE*fp;
inti;
if((fp=fopen("b.txt","wb"))==NULL)
{printf("\nCannotopenfile\n");
returnNULL;}
for(i=0;iif(a[i].xuehao!
=0)
if(fwrite(&b[i],sizeof(structb),1,fp)!
=1)
printf("filewriteerror\n");
fclose(fp);
}
load()
{FILE*fp;
inti;
if((fp=fopen("b.txt","rb"))==NULL)
{printf("\nCannotopenfile\n");
returnNULL;}
for(i=0;!
feof(fp);i++)
fread(&b[i],sizeof(structb),1,fp);
fclose(fp);
return(i-1);
}
printf_face()
{printf("\n\txuehaokechenghaokechengmingx