还剩16页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
■・C:\Users\ZSJ・PAD\De5ktp\C语言谖程gil3\Debug\
000.exe・基别露庭系学号姓名央语互南址教王五2012002评品德评语文数学性住系9086平均分综合分综合测评分排名评
88.
6789.00平均分排名1联语评住址学号些名教央性李四庭2012001互品德基南语文数学联9086平均分综合分
83.
6782.30综合测评分排名平均分排名33语口分性别评联系电话文基语教18000均姓名央互品德评平分90综张三学数学号么五.程序源代码学生综合测评系统2013年1月3日#includestdio.h#includestdlib.h#defineN100//------------------------------------------------------------函数声void init;明char wele;void InputlnfoO;void view;void xiugai;void DeletelnfoO;void paiminglstruct studentjnfo student[];void paiming2struct studentjnfo student[];void ViewAIIO;void clean;void PaimingViewO;void exit;struct studentjnfoinput;void Sortlnfostruct studentjnfo student[];void Viewlnfostruct studentjnfo*sp;void SaveStructstruct studentjnfo*sp,int sizejntn,char filename
[20];void LoadStructstruct studentjnfo*sp,int sizejntn,char filename
[20];void Savelntint*p,int sizejntn,char filename
[20];
909112.
320003880.88609098758096%80%9080157354861586void Loadlntint*p,int sizejntn,char filename
[20];int NumExiststruct studentjnfo student[],int num;//-------------------------------------------------定义学生信息结构体---------------------------------------------------------------struct studentjnfo{int num;〃学号char name
[6];//char sex
[5];〃性别char adress
[20];〃家庭住址chartel
[10];//int Chinese,math,english^uping^ingdejiaoping^aiming^paiiriing;〃语文数学英话互评品德教评double ave,zhongping;//平均综合〃每个学生的信息为学号、、性别、家庭住址、取系、话文、数学、外语三门单科成绩、〃考试平均成绩、考试名次、同学互评分、品德成绩、任课教师评分、综合测评总分、综合测评名次〃考试平均成绩、同学互评分、品德成绩、任课教师评分分别占综合涮评总分的60%,10%,10%,20%);o//-------------------------------------------------定义全局结构体数据---------------------------------------------------------------struct studentjnfo student[N];int counter,PM;//---------------------------------------------------------------------主函数--------------------------------------------------------------void maininit;〃调用初始化函数while1char select;select=wele;switchselect InputlnfoO;break;〃选项1输入学生信息case T:systemcls view;break;〃选项2:浏览学生信息case2:systemcls xiugai;break;〃选项3:修改学生信息case3:systemcls DeletelnfoO;break;〃选D4:删除学生信息case4:systemclspaimingl student;paiming2student;PM=1;getchar;case5:systemclsgetchar;systemcls;break;〃选项5:学生信息排名case6:systemCcls;ViewAII;break;〃选项6:浏览全部学生信息case7:systemcls;clean;break;〃选项7:清除所有信息case8:systemcls;PaimingView;break;〃选项8:查词排名case O:systemCcls;exit;break;〃选项9:退出//---------------------------------------------初始化函数void init{FILE*fp;〃打开计数变量counter文件fp=fopen,counter.dat,,,rb;iffp!=NULL〃载人counter fclosefp;Loadlntcounter,sizeofcounter,1,counter.dat;else fp=fopencounter.dat,,,,,wb;〃若没有counter文件,则创建一个,counter初始为0fclosefp;counter=0;ifcounter!=0〃载人学生数据LoadStructstudent,sizeofstruct studentjnfo,counter,student_info.dat;//------------------------------------------------------------欢迎函数char wele{char select;while1{systemcls;printfCN欢迎使用学生信息管理系统printf\n;printfCL录入学生信息printf2浏览学生信息尸printfC3修改学生信息printf4删除学生信息printf5排名学生成绩printf”,浏览所有学生信息nI/^5■/\/J\/!\/J\/!\/J\P「intf7清除所有数据printf8查询排名printfCO.iB出输入相应的日能序号「;select=getchar;ifselect==11||select==,2,||select==,3,||select==,4,||select==15,||select==,6,||select==,7,||select==,8,||select==,0,returnselect;systemcls;continue;//
1.录入学生信息-------------------------------------void InputlnfoOint i,n;printfC需要录入多少位学生的信息「;scanf%d,n;systemcls;fori=1;i=n;i++student[counter]=input;counter++;PM=0;Sortlnfostudent;SaveStructstudent,sizeofstruct student_info,counter,studentjnfo.dat;Savelntcounter,sizeofcounter,1,counter.dat;//
2.游览学生信息void viewint i,num;print/i青输入需要游览的学生信息的学号scanf%d,num;getchar;ifi=NumExiststudent,num==-1printf不存在该学号,接回车键返回…”;getchar;systemcls;return;Viewlnfostudent[i];printf\n接回车键返0getchar;systemcls;return;}//
3.修改学生信息void xiugaiint i,num;char YN,select;printf请输入需要修改的学生信息的学号「;scanf%d,num;getchar;ifi=NumExiststudent,num==-1printf不存在该学号,接回车键返回…”;getchar;systemcls;return;Viewlnfostudent[i];printfC是否要修改Y/N:;scanf%c,YN;getchar;ifYN!=Y YN!=yprintfC修改取消「;getchar;systemcls;return;systemCcls;printfCI.学号尸尸printf
2.14别p「intf”
3.家庭尸■■住址printf
4.1系■尸p「intf
5.语文成绩尸■p「intf6数学成绩p「intf
7.外话成绩p「intf”
8.同学互评分printf”
9.品德成绩PrintfCO.任课教师教师评分尸scanf%c,select;switchselectcase T:printf修改学号:;scanf”%d;student[i].num;b「eak;case2:printf修改性别;scanf%s\student[i].sex;b「eak;case3:printf修改家庭住址:;scanf%s\student[i].adress;break;case4:printf fif改取系:;scanf”%s”,student[i].tel;break;case5:printf修改话文:,;scanf,%d,student[i].chinese;break;case6:printf修改数:;scanf1%d,student[i].math;break;case7:printf修改外语成绩:;scanf%d;student[i].english;break;case8:printf修改同学互评5t,1;scanf%d,student[i].huping;break;%case9:printf修改品德成绩:;scanf cT,student[i].pinQde;break;%case O:p「intf修改任课教师评分:;scanf”cT,student[i].jiaoping;break;}Sortlnfostudent;SaveStructstudent,sizeofstruct studentjnfo,counter,student_info.dat;PM=0;getchar;xn1Nik\\\\\\\\\\\\\\\\\\^1/••J,,«755,,\J/\J/\J/\/\/\/\n/\/\7printf修改完成…”;getchar;systemCcls;//
4.删除学生信息void DeletelnfoOint i,j,num;char YN;%printT请输入要删除的学生信息学号scanf”cT,num;ge忙ha「;ifi=NumExiststudent,num==-1printfC没有该学号,接回车键返回…”;getchar;systemcls;return;Viewlnfostudent[i];printfCn确认删除Y/N:;scanf%c,YN;getchar;计YN!二Y YN!=yelseforj=i;jcounter-1;j++student[j]=student[j+1];counter—;PM=0;SaveStructstudent,sizeofstruct studentjnfo,counter,studentjnfo.dat;Savelntcounter,sizeofcounter,counter,counter.dat;prints删除完成…;getchar;systemCcls;平均分、综合分排名void paiminglstruct studentjnfo student[]struct studentjnfo*p[N],*temp;int i,j;fori=0;icounter;i++p[i]=student[i];fori=0;icounter-1;i++forj=i+1;jcounter;j++ifp[i]-avep[j]-avetemp=p[i];;p[i]=p[j]p[j]=temp;fori=0;icounter;i++p[i]-paiming1=i+1;printT平均分排名完成…\n”;〃综合测评分排名void paiming2structstudentjnfostudent[]structstudentjnfo*p[N],*temp;int ij;fori=0;icounter;i++p[i]=student[i];fori=0;icounter-1;i++forj=i+1;jcounter;j++ifp[i]-zhongpingp[j]-zhongping{temp=p[i];;p[i]=p[j]p[j]=temp;fori=0;icounter;i++p[i]-paiming2=i+1;printf,综合测评分排名完成…\俏;//-------------------------------------------------------------
6.浏览所有学生信息--------------------------------------------------------------void ViewAIIO{int i;fori=0;icounter;i++{Viewlnfostudent[i];printf\n;getchar;printf咽车回返0getchar;systemCcls;//
7.清除所有信息------------------------------------void cleancounter=0;Savelntcounter,sizeofcounter,1,counter.dat;;print清除完毕…”getchar;getchar;systemcls;//
8.查询排名----------------------------------------------void PaimingViewOint i,num;printf,输入要查询的学号:;scanf%d,num;getchar;i=NumExiststudent,num;ifi==-1printfI学号不存在…”;getchar;return;}ifPM==0{printf请先进行成绩排名…”;getchar;return;printf%s的平均分排名%d\n,student[i].name,student[i].paiming1;printf%s的综合测评分%d\n,l,student[i].name,student[i].paiming2;printfC接回车键返回…getchar;return;}//------------------------------------------------------------------------
9.退出-------------------------------------------------------------void exit使用!\n;exitO;//------------------------------------------------------------输入信息函数--------------------------------------------------------------structstudentjnfoinput structstudentjnfostu,*sp;char YN;sp=stu;while1%{while1{printfC录入学号:1;scanf cT,sp-nuni;getchar;ifNumExiststudent,sp-num!=-1printffM学号已存在,请重新输入.・.”;getchar;systemcls;continue;break;printf录入getssp-name;printf录入性刖getssp-sex;,printf录入家庭住址:;getssp-adress;prints录入联系:“;getssp-tel;;printf\n接下来录入成绩\n“printfC语文scanf%d,sp-chinese;printfC数学scanf%d,sp-math;英语scanf%d,sp-english;sp-ave=sp-chinese+sp-math+sp-english/
3.0;printfC同学互评:“;scanf%d,sp-huping;printfC品德分数;scanf%d,sp-pingde;printf教师评价scanf%d,sp-jiaoping;getchar;sp-zhongping=sp-ave*
0.6+sp-huping*
0.1+sp-pingde*
0.1+sp-jiaoping*
0.2;printf录入完毕,确认信息是否正确Y/N;YN=getchar;getchar;if YN==Y||YN==y break;elseprintf接回车键重新录入信息;getchar;systemCcls;continue;}systemcls;return stu;//------------------------------------------------------------排序函数--------------------------------------------------------------void Sortlnfostructstudentjnfostudent[]int ij;structstudentjnfotemp;fori=0;icounter-1;i++forj=i+1;j=counter-1;j++{ifstudent[i].numstudent[j].numtemp=student[i];student[i]=student[j];student[j]=temp;//------------------------------------------------------------显示学生信息--------------------------------------------------------------void Viewlnfostructstudentjnfo*sp printf学号\t\t性别\t家庭住址\t联系\俏;printf%d\t%s\t%s\t%s\t\t%s\n,sp-num,sp-name,sp-sex,sp-adress,sp-tel;printfCiB文\t数学\t英话\t5评\t品德;\t教评\n“printf%d\t%d\t%d\t%d\t%d\t%d\t\n\sp-chinese,sp-math,sp-enQlish,sp-hijping,sp-pingde,sp-jiaoping;printT平网分\t综合分\俏;printf%.2f\t%.2f\n sp-ave,sp-zhongping;ifPM==15piW平均分排名\t综合涮评分排名俏;%printf d\t\t%d\rr,sp-paiming1,sp-paiming2;//----------------------------------------------------信息存盘结构体-------------------------------------------------------------void SaveStructstructstudentjnfo*sp,int size,int n,char filename
[20]FILE*fp;fp=fopenfilename,,,wb;fwritesp,size,n,fp;fclosefp;//读取信息(结构体)void LoadStructstructstudentjnfo*sp,int sizejntn,char filename
[20]FILE*fp;fp=fopenfilename,rb;freadsp,size,n,fp;fclosefp;//-------------------------------------------------------信息存盘整型-------------------------------------------------------------void Savelntint*p,int sizejntn,char filename
[20]FILE*fp;fp=fopenfilename,,,wb;fwritep,size,n,fp;fclosefp;//-------------------------------------------------------读取信息整型-------------------------------------------------------------void Loadlntint*p,int sizejntn,char filename
[20]FILE*fp;fp=fopenfilename,rb;freadp,size,n,fp;fclosefp;//------------------------------------------------------------检索学号--------------------------------------------------------------int NumExiststructstudentjnfostudent[],int num{inti;fori=0;icounter;i++{ifstudent[i].num==num returni;return-1;〃源代码结束大.收获及体会这次的课程设计让我进步很大原来只是编写一些小型的计算程序,排序程序现在却编写了一个这么长的代码在编写程序的过程中,我发现很多看做没碰到过的情况都可以用一些基础的算法组合起来解决比如学号排序排序的问题很容易让人想起用冒泡法,但是这一次我们进行交换移位的不是整型数据了,而是结构体数据当然,在设计过程中我也考虑了尽量让程序少占用储存空间,少儆运算在排名成绩名次时,采用的不是排列构造体数组,而是新建一个指针数组,来排列这个指针数组来代替排列构造体数组很显然,排列指针比排列构造体要快捷多了当然,少占用硬盘空间也是一个重要选则每次写入硬盘上的数据都是有用的数据,而不是把structstudent_infostudent[N]整组数组全部存储根据counter判断需要储存到那一个元素结束同时为了能在关闭程序后,下一次程序运行能保留上一次的数据counte「作为计数变量也被储存了起来在程序刚刚启研的初始化过程中,加载counter.dat和student_info.dat进入存,使得上次数据保留下来,并且可以随意处理,利用当然,设计counter变量并把counter变量保存起来,是我这一次课程设计一直因扰我的地方原来的程序每次都是只要求运行一次,而现在需要的是多次运行,并且每次启动需要恢复上一次运行时的状态于是,想到了招counter单独保存起来这样有了counter既可以蛤到好处的,把学生数据从硬盘加载到存中也可以保护程序不会读取没有赋值的数组元素这个数据区被限制在了counte「个元素当然,当添加或删除,学生信息时,counter需要加一或者版一重新限制数组可用围总之,通过这一次课程设计我学习到了很多深刻的体会到了,复杂的系统是一个个简单构建的统一机作乜参考文献⑴贾宗璞、许合利,c塔言程序段计[B].人民邮电,2012年9月计算机与通信学院课程设计评分表课程名称《C语言程序设计》项目分数设计方案的合理性与创造性设计与调试结果设计说明书的质量答辩述与回答问题情况课程设计周表现情况综合成绩
一、设计容与段计要求学生综合测评系统
一、问题描述:每个学生的信息为学号、、性别、家庭住址、联系、话文、数学、外话三口单科成绩、考试平均成绩、考试名次、同学互评分、品德成绩、任课教师评分、综合测评总分、综合测评名次考试平均成绩、同学互评分、品德成绩、任课教师评分分别占综合测评总分的60%,10%,10%,20%o
二、功能描述、学生信息处理A⑴输入学生信息、学号、、性刖、家庭住址、联系,接学号以小到大的顺序存入文件中提示学生信息可先输入到数组中,排序后可写到文件中插入修改同学信息2提示先输人招插入的同学信息,然后再打开源文件并建立新文件,把源文件和输入的信息合并到新文件中保持报学号有序若存在该同学则将新记录容替换源容,删除同学信息3提示输人将删除同学号,读出垓同学信息,要求对此进行确认,以决定是否删除将删除后的信息写到文件中浏览学生信息:4提示打开文件,显示该文件的学生信息、学生数据处理:B⑴按考试科目录入学生成绩并且按公式考试成绩=据文+数学+外话计算考试成绩,并计算考试名次,提示先把学生信息读人/3数组,然后按提示输入每科成绩,计算考试成绩,求出名次,最后把学生记录写入一个文件中学生测评数据输入并计算综合测评总分及名次2提示综合测评总分二考试成绩同学互评分品德成绩任课老师评分*
0.6+*
0.1+*
0.1+*
0.2学生数据管理3提示输入学号,读出并显示该同学信息,输入新数据,将改后信息写入文件学生数据查询:4提示输入学号或其他信息,即读出所有数据信息,并显示出来、学生综合信息输出C提示输出学生信息到屏幕
三、算法提示:、数据结构结构体类型数组
1、数据库结构下表构成该系统的基本数据库2学号考试成绩评分••••••Char Charstruct int••••••第18周星期四第二次上机机房第18周星期五第三次上机与答辨机房工程学院计算机与通信学院四.总体设计方案
1.总体流程图
2.程序主要函数
1.void inti初始化国数初始化函数用于从硬盘中加教学生数据和学生数目首先,从硬盘读取counter.dat的数据若不存在counter.dat则说明程序第一次运行创建counter.dat和student_data.dat,把counter的初始值赋为1若存在Ocounter.dat.则读取其中数据,把数据赋给变量counter,这个值为已储存的学生信息数量这个counter变量就是计数器变量用来计量学生信息数量的变化
2.wele函数Wele函数用来显示选项菜单,并招用户所选的序号返回工\U-UPA5匚Fv*\C百言常m..£r■八DebugOOOeQ欢迎使用学生信息管理系统・录入学生信息.浏览学生信息2・修改学生信息.删除学生信息
4.排名学生成绩
5.浏览所有学生信息6清除所有数据L.查询排名
8.退出0输入相应的功能序号:主函数中的变量select接收到wele的返回值通过开关语旬,选择需要使用的功能
3.void InputlnfoO录入学生信息输入学生的信息学生信息由以下结构体定义structstudentinfoint num;〃学号char name
[6];//char sex
[5];〃性刖char adress
[20];〃家庭住址chartel[1O];//int Chinese,math,english,huping,pingde,jiaoping,paiming1,paiming2;〃语文数学英语互评品德教评double ave,zhongping;//平均综合Inputinfo调用input函数在input函数中的局部变量stu中录入数据,然后input函数返回stu给Inputinfo中的结构体数组的counter号元素然后,Inputinfo通过Sortlnfo;SaveStructO;SavelntO;将数组按学号排序,并存储结构体student和counter
04.void DeletelnfoO|i]除信息删除信息函数,从要删除位信息开始,前位用后一位覆盖,直到数组结束并同时将counter U1O之后调用SaveStructO;Savelnt;l存student结构体数组和counte「计数变量
5.void paimingl/void paiming25绩排名排名函数将student的给个元素的首地址储存在p[N]指针数组中通过冒泡法将指针数组排序接下来,按顽序把指针数组I序,把排名赋给student的成员paimingl,paiming2o冒泡排序fori=0;icounter-1;i++forj=i+1;jcounter;j++ifp[i]-avep[j]-avetemp=p[i];;p[i]=p[j]p[j]=temp;排名名词给每一个student的成员paimingl或paiming2ofori=0;icounter;i++p[i]-paiming1=i+1;
6.void ViewAIIO浏览全部学生信息void ViewAIIO{inti;fori=0;icounter;i++Viewlnfostudent[i];printf\n;getchar;回车键返0getchar;systemCcls;
7.void clean清除所有信息counter计数变量清零,counter.dat清空,student_info.dat清空
8.void PaimingViewO查询排名根据输入的学号查询排名
3.程序其他函数A.信息存盘(结构体)void SaveStructstructstudentjnfo*sp,int sizejntn,char filename
[20]{FILE*fp;fp=fopenfilename,,,wb;fwritesp,size,n,fp;fclosefp;B.读取信息(结构体)void LoadStructstructstudentjnfo*sp,int sizejntn,char filename
[20]C.信息存盘(整型)void Savelntint*p,int sizejntn,char filename
[20]FILE*fp;fp=fopenfilename,,,wb;fwritep,size,n,fp;fclosefp;D.读取信息(整型)void Loadlntint*p,int sizejntn,char filename
[20]E.学号检索int NumExiststructstudentjnfostudent[],int numinti;fori=0;icounter;i++ifstudent[i].num==num returni;}return-1;)检索学号所在的元素下表,若学号存在,则返回该学号所在下标若学号不存在,则返回程序截。