学籍管理系统_第1页
学籍管理系统_第2页
学籍管理系统_第3页
学籍管理系统_第4页
学籍管理系统_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计报告课程名称:C语言程序设计课设项目名称:学籍管理系统学院:专业:姓名:学号:指导教师:成绩:2010年6月4日TOC\o"1-5"\h\z\o"CurrentDocument"第1部分课程设计题目与要求1\o"CurrentDocument"问题描述1\o"CurrentDocument"功能要求1\o"CurrentDocument"任务分工3\o"CurrentDocument"第2部分《学籍管理系统》的设计与功能实现4\o"CurrentDocument"总体设计4\o"CurrentDocument"数据结构5\o"CurrentDocument"算法设计5\o"CurrentDocument"程序代码设计11\o"CurrentDocument"测试与调试19\o"CurrentDocument"第3部分课程设计总结28\o"CurrentDocument"个人总结28\o"CurrentDocument"结束语29\o"CurrentDocument"附录1程序清单30\o"CurrentDocument"附录11用户使用说明书57\o"CurrentDocument"参考文献60第1部分课程设计题目与要求问题描述为了分析教学效果并进行相应的学籍处理,各学校每到学期末都对综合成绩进行分类统计、上报成绩汇总结果等,这给每位老师和学籍管理人员带来很大的工作量。使用学籍管理系统可以减少工作者的工作负担。为了方便管理人员查找学生信息,在创新功能中,增加查询成绩功能,增加按学科成绩排名的功能,由于学籍管理系统涉及学生成绩及信息的安全,所以有必要给系统增加密码保护的功能,以保护系统信息的安全。功能要求循环显示如图-1所示的主菜单。其中,原始数据的排列是无序的。系统应能够保留原始成绩单。请输入选项编号E〜4〉:成感子耍系

入计理新

录统处创秦

-----

-----

12成感子耍系

入计理新

录统处创秦

-----

-----

123450在主菜单选择1:可以进行成绩的录入。在主菜单选择2:进入如图-2的子菜单,并统计成绩。在此可以计算平均、统计各分数段、按学号排序、按平均分排序。在子菜单选择1时,将该班学生的成绩按学号升序排序后的顺序存入std.dat文件中,以方便打印。在子菜单选择2时,求出每位学生的平均分,并按平均分从高到低的顺序进行排序后,写入文件sort.dat中。在子菜单选择3时,统计出各门课、各分数段学生的人数,并如下表的形式输出。在子菜单选择4,返回主菜单;选择0,退出整个系统。序排段

鬻均统

号平平系

学回出

按*返退

-----

-----

12340图-2在主菜单选择3:进入如图-3所示的子菜单,处理学籍。在子菜单中选择1,为不及格的学生打印重考通知单时,应在通知单上写明重考的课程、时间和地点(由键盘输入)。为了参加多门课重考的学生完成补考,应避免时间重复。在子菜单中选择2,为3门以上不及格的学生打印退学通知单。通知单上应写明学生的学号、姓名、退学原因(几门课不及格,成绩是多少)。在子菜单中选择3时,删除已退学的学生信息,将该班中升入高年级的学生信息写入文件next.dat中。在子菜单选择4,返回主菜单;选择0,退出整个系统。单单nn*矢诵通册考着鹰新nrnrnrEEE统■汗开开系成成成回出生造造返退---------12340图-3在主菜单中选择4:进入如图-4所示的子菜单,在子菜单中选择1时,可以用学生的学号或姓名查询学生的成绩。在子菜单中选择2时,可以选择5门课查看五门单科成绩排名,在子菜单中选择3,可以对系统程序进行密码设置,以保护系统程序中的信息安全。名---绩膏护统

成我系

宣子码回出

查堑良退

-----

-----

12340图-4在主菜单中选择5:可以显示我们组成员信息。如图-5所示。图-5在主菜单中选择0:显示结束信息。按任意键后,退出系统。主菜单和子菜单能够循环出现,每一项菜单执行之后,询问用户是否继续进行。从子菜单可以返回到主菜单。3.任务分工我们小组成员有C,B和A。此程序是由我们共同完成的。由C负责录入成绩模块(voidmycreatevoidmyprintf1()voidmyprintf2()voidmyprintf3()voidmyrintf4()函数),B负责统计成绩模块(voidmychongji函数,其中包括voidmypiauxu1()、voidmypianxu2()、voidmypianxu3()函数),A负责主模块,学籍处理模块和创新功能模块(包括voidchulixueji()voidchuanxin函数,其中包括voidbukao(),voidtuixue(),voidshengxue(),voidchaxun(),voidxueke(),voidshezhimima()函数)。第2部分《学籍管理系统》的设计与功能实现1.总体设计第2部分《学籍管理系统》的设计与功能实现根据题目要求,本系统分为一个主模块和五个子模块,其中,子模块包括录入成绩模块、统计成绩模块、处理学籍模块、创新功能模块和关于我们等五个模块。系统功能结构图如下图所示:主模块录入成绩模块统计成绩模块录入成绩模块统计成绩模块处理学籍模块创新功关于我能模块们模块已有记录无记录按学号排序计算平均分并排序统计各分数段生成并打印补考通知单生成并打印退学通知单生成并打印新名册查询成绩按学科成绩排名密码保护本系统包括以下12个函数:(1)voidmyprintf1();函数功能:输出主菜单。(2)voidmyprintf2();函数功能:输出成绩统计子菜单。(3)voidmyprintf3();函数功能:输出学籍处理子菜单。(4)voidmyprintf4();函数功能:输出创新功能子菜单。(5)voidmyprintf5();函数功能:输出关于我们模块内容。(6)voidmycreate();函数功能:定义录入成绩函数,通过键盘输入学生学号,姓名和各科成绩并存放到文件中。(7)voidpianxu1(structstudentstu[],intn);函数功能:定义按学号排序函数,将所有学生的信息通过学号进行排序(被voidmytongji函数调用)。(8)voidpianxu2(structstudentstu[],intn);函数功能:定义按平均分排序函数,将所有学生的信息通过其平均分进行排序(被voidmytongji函数调用)。(9)voidpianxu3(structstudentstu[],intn);函数功能:定义统计各科分数段函数,将所有学生的各科成绩进行统计,按分数段进行输出(被voidmytongji函数调用)。voidmytongji();函数功能:定义成绩统计函数。voidbukao(structstudentstu[],intn);函数功能:定义生成并打印补考通知单(被voidchulixueji函数调用)。voidtuixue(structstudentstu[],intn);函数功能:定义生成并打印退学通知单(被chulixueji函数调用)。voidshengxue(structstudentstu[],intn);函数功能:定义生成并打印新名册(被chulixueji函数调用)。voidchulixueji();函数功能:定义处理学籍函数。voidchaxun(structstudentstu[],intn);函数功能:定义查询成绩函数(被函数voidchuanxin()调用)。voidxueke(structstudentstu[],intn);函数功能:定义学科成绩排名函数(被函数voidchuanxin()调用)。voidshezhimima();函数功能:定义密码保护函数(被函数voidchuanxin()调用)。voidchuanxin();函数功能:定义创新功能函数。数据结构学生信息项用结构体student表示,其中包括7个属性,学号num,姓名name,5门成绩chengji[5]。structstudent{charnum[10],name[15];intchengji[5];};学生补考信息项用结构体bukaoxinxi表示,其中包括6个属性,补考时间time1,补考地点size1,补考时间time2,补考地点size2,补考时间time3,补考地点size3。structbukaoxinxi{chartime1[10],time2[10],time3[10],size1[10],size2[10],size3[10];};算法设计系统主函数mian()设计录入成绩模块函数voidmycreate设计打开文件成绩统计模块函数voidtongji设计输入choose23其它4011r1处理学籍模块函数voidchulixueji设计输入choose23其它4011r1创新功能模块函数voidchuanxin设计4.程序代码设计主模块函数部分代码do{myprintf1();printf("");choose=getch();printf("\n");switch(choose){case'1':/*录入成绩*/mycreate();break;case'2':/*统计成绩*/mytongji();break;case'3':/*处理学籍*/chulixueji();break;case'4':/*创新功能*/chuanxin();break;case'5':/*关于我们*/myprintf5();break;case'0':/*退出系统*/{system("cls");printf("\n\n\n\n\n\n\n============================\n感谢使用本软件,已正常退出,按任意键结束!\n============================\n\n\n\n");};exit(0);default:{printf("%c为非法选项,请重新输入!按任意键继续!\n",choose);getch();};}}while(choose!='0');此为主模块的主要代码。用do-while循环,显示主菜单,再用getch来输入要选择的项choose,用switch来判断所选的,然后执行相应的函数,如选择1,就执行mycreate函数等。如果输入的不是0-5,就会一直的循环,直到输入的是0-5选项。录入成绩模块函数部分代码fp=fopen("chengji.dat","a");do{fflush(stdin);〃清除缓存printf("请输入学生的成绩:\n");printf("学号•(按#结束输入):");do{gets(temp.num);}while(strcmp(temp.num,"")==0);printf("姓名(按#结束输入):");do{gets();}while(strcmp(,"")==0);printf(-请依次输入高数、英语、物理、编程、马哲成绩:,scanf("%d%d%d%d%d”,&temp.chengji[0],&temp.chengji[1],&temp.chengji[2],&temp.chengji[3],&temp.chengji[4]);if(temp.num[0]!='#'&&[0]!='#')fprintf(fp,"%s%s%d%d%d%d%d\n”,temp.num,,temp.chengji[0],temp.chengji[1],temp.chengji[2],temp.chengji[3],temp.chengji[4]);}while(temp.num[0]!='#'&&[0]!='#');fclose(fp);程序开始先以“a”方式打开文件chengji.dat,显示提示输入内容,用do-while循环将输入成绩包裹在内,当输入的不是“#”号,就继续执行循环,继续输入成绩。循环内又镶有do-while循环,要判断输入的是不是为空,若为空,则重新输入。然后将输入的内容写入文件chengji.dat中,当输入的为“#”号时,跳出循环,结束输入。统计成绩模块函数部分代码for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(strcmp(stu[k].num,stu[j].num)>0)k=j;t=stu[k];stu[k]=stu[i];stu[i]=t;}这是用选择排序法对学生的信息按学号进行排序。for(i=0;i<n;i++)ave[i]=(stu[i].chengji[0]+stu[i].chengji[1]+stu[i].chengji[2]+stu[i].chengji[3]+stu[i].chengji[4])/5.0;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(ave[k]>ave[j])k=j;t2=stu[k];stu[k]=stu[i];stu[i]=t2;t1=ave[k];ave[k]=ave[i];ave[i]=t1;}用for循环计算每一位学生的平均分ave,再用选择排序法对每一位学生按平均分进行排序。for(i=0;i<n;i++)//统计高数各分数段的人数{if(stu[i].chengji[0]/10<6)gaoshu[4]++;else{if(stu[i].chengji[0]/10==10)gaoshu[0]++;elsegaoshu[9-(stu[i].chengji[0]/10)]++;}}这是统计高数各分数段的人数。用for循环对每一位学生的高数成绩进行判断,stu[i].chengji[0]/10<6是指学生的成绩小于60分,并在高数60分以下的人数增一。stu[i].chengji[0]/10==10是指学生的成绩等于100分,并在高数90分以上的人数增一。gaoshu[9-(stu[i].chengji[0]/10)]++;是指对学生的每一分数段的人数进行统计,并在相应的人数段增一。do{myprintf2();printf("");choose=getch();printf("\n");switch(choose){case'1':pianxu1(stu,i);break;case'2':pianxu2(stu,i);break;case'3':pianxu3(stu,i);break;case'4':return;case'0':{system("cls");printf("\n\n\n\n\n\n\n============================\n感谢使用本软件,已正常退出,按任意键结束!\n============================\n\n\n\n");};exit(0);default:{printf("%c为非法选项,请重新输入!按任意键继续!”,choose);getch();};}}while(choose!='0');此为成绩统计功能模块的主要代码。用do-while循环,显示成绩统计模块子菜单,再用getch来输入要选择的项choose,用switch来判断所选的,然后执行相应的函数。如果输入的不是0-4,就会一直的循环,直到输入的是0-4选项。学籍处理模块函数部分代码for(i=0;i<n;i++){if(count[i]>0&&count[i]<=3){k=0;for(j=0;j<5;j++){if(stu[i].chengji[j]<60){k++;if(k==1){switch(j){case0:{printf("%15s学生高数不及格,请输入他的补考时间和地点:",stu[i].name);scanf("%s%s”,&bukaoren[i].time1,&bukaoren[i].size1);};break;case1:{printf("%15s学生英语不及格,请输入他的补考时间和地点:",stu[i].name);scanf("%s%s”,&bukaoren[i].time1,&bukaoren[i].size1);};break;case2:{printf("%15s学生物理不及格,请输入他的补考时间和地点:",stu[i].name);scanf("%s%s”,&bukaoren[i].time1,&bukaoren[i].size1);};break;case3:{printf("%15s学生编程不及格,请输入他的补考时间和地点:",stu[i].name);scanf("%s%s”,&bukaoren[i].time1,&bukaoren[i].size1);};break;default:{printf("%15s学生马哲不及格,请输入他的补考时间和地点:",stu[i].name);scanf("%s%s”,&bukaoren[i].time1,&bukaoren[i].size1);};break;}}if(k==2){do{l=0;switch(j){case0:{printf("高数不及格,请输入他的补考时间和地点:");scanf("%s%s”,&bukaoren[i].time2,&bukaoren[i].size2);};break;case1:{printf("英语不及格,请输入他的补考时间和地点:");scanf("%s%s”,&bukaoren[i].time2,&bukaoren[i].size2);};break;case2:{printf("物理不及格,请输入他的补考时间和地点:");scanf("%s%s”,&bukaoren[i].time2,&bukaoren[i].size2);};break;case3:{printf("编程不及格,请输入他的补考时间和地点:");scanf("%s%s”,&bukaoren[i].time2,&bukaoren[i].size2);};break;default:{printf("马哲不及格,请输入他的补考时间和地点:");scanf("%s%s”,&bukaoren[i].time2,&bukaoren[i].size2);};break;}if(strcmp(bukaoren[i].time2,bukaoren[i].time1)==0){l=1;printf("您输入的时间冲突!请重新输入!\n");}}while(l==1);}if(k==3){do{l=0;switch(j){case0:{printf("高数不及格,请输入他的补考时间和地点:");scanf("%s%s”,&bukaoren[i].time3,&bukaoren[i].size3);};break;case1:{printf("英语不及格,请输入他的补考时间和地点:");scanf("%s%s”,&bukaoren[i].time3,&bukaoren[i].size3);};break;case2:{printf("物理不及格,请输入他的补考时间和地点:");scanf("%s%s”,&bukaoren[i].time3,&bukaoren[i].size3);};break;case3:{printf("编程不及格,请输入他的补考时间和地点:");scanf("%s%s”,&bukaoren[i].time3,&bukaoren[i].size3);};break;default:{printf("马哲不及格,请输入他的补考时间和地点:");scanf("%s%s”,&bukaoren[i].time3,&bukaoren[i].size3);};break;}if(strcmp(bukaoren[i].time3,bukaoren[i].time1)==0){l=1;printf("您输入的时间冲突!请重新输入!\n");}if(strcmp(bukaoren[i].time3,bukaoren[i].time2)==0){l=1;printf("您输入的时间冲突!请重新输入!\n");}}while(l==1);}}}}}}这是对成绩不及格科目少于等于3科的学生生成并打印补考通知单的代码,先对学生成绩不及格科目进行统计,若学生不及格科目数count大于0而小于等3时,该学生就要进行补考,利用for循环,对每一个学生每一门科进行判断,若该门科不及格,就要求为他输入补考的时间和地点,用switch要判断学生是哪门科不及格,再用if来判断学生的补考时间是否有冲突。最后,再用for循环逐一将需要补考的学生显示出来。for(i=0;i<n;i++){for(j=0;j<5;j++)if(stu[i].chengji[j]<60)count[i]++;if(count[i]>3){printf("%-15s%-15s",stu[i].num,stu[i].name);for(j=0;j<5;j++){if(stu[i].chengji[j]<60){switch(j){case0:printf("高数%-4d”,stu[i].chengji[0]);break;case1:printf("英语%-4d”,stu[i].chengji[1]);break;case2:printf("物理%-4d”,stu[i].chengji[2]);break;case3:printf("编程%-4d”,stu[i].chengji[3]);break;default:printf("马哲%-4d”,stu[i].chengji[4]);break;}}}printf("\n");}}这是学生退学名单的代码,用for循环对不及格科目大于3科的学生进行统计,再用switch将其每一门不及格的科目显示出来。for(i=0;i<n;i++){for(j=0;j<5;j++)if(stu[i].chengji[j]<60)count[i]++;if(count[i]<=3){printf("%-15s%-15s%-7d%-7d%-7d%-7d%-7d\n”,stu[i].num,stu[i].name,stu[i].chengji[0],stu[i].chengji[1],stu[i].chengji[2],stu[i].chengji[3],stu[i].chengji[4]);fprintf(fp,"%s%s%d%d%d%d%d\n”,stu[i].num,stu[i].name,stu[i].chengji[0],stu[i].chengji[1],stu[i].chengji[2],stu[i].chengji[3],stu[i].chengji[4]);}}用for循环对每一位学生的每一不及格门科进行统计,再用if判断每一个学生的不及格科目是否不大于3,当不及格科目count不大于3时,将其输出并写入文件next.dat中。创新功能模块函数部分代码printf(-请输入要查询的学号:,gets(a);for(i=0;i<n;i++){if(strcmp(a,stu[i].num)==0){s=1;system("cls");//清屏printf("\n\n\n==================================\n");printf("您要查询的成绩如下:\n");printf("==================================\n");printf("学号学生姓名高数英语物理编程马哲\n");printf("%-15s%-15s%-7d%-7d%-7d%-7d%-7d\n”,stu[i].num,stu[i].name,stu[i].chengji[0],stu[i].chengji[1],stu[i].chengji[2],stu[i].chengji[3],stu[i].chengji[4]);printf("==================================\n");printf("按任意键继续!");getch();}}if(s==0){printf("没有找到!按任意键继续!");getch();}这是按学号进行查询,用gets(a);输入要查询的学号,在for循环中对每一位学号的学号比较,如果输入的要查询的学号a与记录中的一个学号相同的话,就输出这个学生的所有信息。同理,按姓名查询设计也基本相同。do{i=0;system("cls");//清屏printf("\n\n\n\n请输入新密码(不超过15个字符):");while((mima2[i]=getch())!='\r'){printf("*");i++;}mima2[i]='\0';printf("\n");printf("请再输入一遍(不超过15个字符):");i=0;while((mima3[i]=getch())!='\r'){printf("*");i++;}mima3[i]='\0';printf("\n");if(strcmp(mima2,mima3)!=0){printf(-两次密码不一致,请重新输入!");getch();}}while(strcmp(mima2,mima3)!=0);}这是设置密码函数的代码,while((mima2[i]=getch())!='\r'){printf("*");i++;

是在每输入一个密码后,显示一个星号,这样可以保护密码,不让其他在场的人看到密码的内容。通过输入两次新密码,再对两次新密码的判断是否相同,在外面再镶上do-while循环,如果两次密码不一致,再重新输入。完整程序代码请参见附录A。5■测试与调试本系统程序是在以MicrosoftVisualC++6.0下进行的,采用分模块调试的方法进行编译,即完成一个函数功能模块就编译一个功能模块,最后再进行整体编译并生成可执行文件。调试过程中会在有些语句前加些其它语句,或者把要求生成的文件格式由.dat格式文件暂时替换成.txt格式文件,以方便调试查看问题,找出错误所在。待到所有完成之后,将调试过程中所加的语句删除,将.txt格式文件再替换回.dat格式文件。在调试的过程中,碰到了以下问题:1、清屏函数在TC中使用的clrsrc()函数,但在VC6.0中没有该函数也没有相应的函数。查资料,发现在VC6.0中可使用system("cls")函数来实现清屏功能。道输入第1个学生的成绩;2、在使用C语言系统函数进行数据输入的时候,发现使用gets()函数输入字符和字符串的时候,系统经常跳过相应的输入语句,无法输入数据。如下图,询问老师得知,是C系统的输入处理的输入缓存问题,解决方法是在进行字符和字符串输入的时候,先使用fflush(stdin)函数清除输入缓存,即可正常输入字符和字符串。道输入第1个学生的成绩;姓名《用it结束输入〉;al次输入高数;英语、物理、编程、马哲成绩'al3、在调试过程中,系统报出大量的相同或相似的错误,比如语句printf("高数%-10s%-10s”,bukaoren[i]->time1,bukaoren[i]->size1);错误errorC2232:'->time1':leftoperandhas'struct'type,use'.',经查是运算符的优先级的问题,按照系统指示,将“->”改成“.”问题就解决了。4、整个程序调试如下(1)运行主程序,出现主界面按任意键后,出现主菜单界面如下(2)调试1功能,出现提示信息请输入选项编号<0^5>:SS8

成感子至系

入计理新

录统处创^

-----

-----

123450成绩单中已有记录,是否继续录入5?因为原有记录,因此输入尸,并输入学生“带头大哥”的成绩,如图优p有记录,是否继续录入>:109302127请输入学生的成H翼1侦头巍、编2哲成晰80808080然后输入#号结束输入,跳回主菜单。功能1运行正常。(3)调试功能2,出现成绩统计子菜单,如图输入1后,程序显示如图学号姓名高数英语物理编程马哲252861147118175624136897370888888987887477856589968998759983219899261220190733960675466877934557467776687878576897226638796253835895280887578888789386847898776888761677931974977218233443070869987689883767556888887888566863882877469857661869900678578778776253516778676768且易基师哥嫣道玉竹淳棉庆昼蠢水秋之复河太大篇誉蕖碧遂玉灵星正红住寇晶有喜因慈坦容星4卖4毒段王阿阿木阿壁无天109302101109302102109302103109302104109302105109302106109302107109302108109302109109302110109302111109302112109302113109302114109302115109302116109302117109302118109302119109302120109302121109302122109302123109302124109302125109302126109302127成绩单正常。按y后返回成绩统计子菜单。输入2后,程序显示学号姓名高数英语物理编程马哲平均分109382125109302110109302109109302120109302126109302121109302107109302127109302108109302105109302122109302103109302106109302123109302102109302101109302112109302116109302119109302111109302124109302104109302114109302118109302115109302113109302117打师哥姥骨基河竹大也关宝之堂羲淳庆水阿洪星星玉朱重_晶富应红山春正容矗律苏阮钟®甘阿玄段虚WK天王W:元阿耶797882768178807876688683767665677876776724158089918387808387849177846687648287676877795182768688858280827978768?7987988288838973663745899879797660828071686767717349707152817783978084869882816985827886518187887764754184.684.483.082.881.681.080.480.079.679.078.878.278.277.877.274.073.673.473.471.869.068.445.0成绩统计正常。这时,验证“要继续选择吗(Y/N)?”,按N后,程序运行显示按任意键后,程序自动关闭。重启程序,并回到成绩统计子菜单,选择3后,程序运行显示各门课、各分数段学生的入数科目州分以上80^8?分70-79分印〜的分印分以下数语理尊口

高英寓马032数语理尊口

高英寓马0321514694151253程序运行结果正常。输入丫,再输入0后,运行结果如下程序运行结果正常。(4)重启程序,选择3,调试功能3,程序显示处理学籍子菜单请输入选项编号<0^4>:9999■ttrT-itrrnn诵诵册考WnurnurnurEEE统■?f?f开系成成成回出生造造返退----------12340选择1,并为补学生输入补考时间和地点,程序运行显示不及格同学补考时间和地点打名骨姓嫣芬阿淳生誉与一春颜正打名骨姓嫣芬阿淳生誉与一春颜正为匾王段H{元段科目应补考时间、

编程08:30

蜀数08=00

r§]§08=00

^^10:00

高§08=00

编程08:30地点实跚跚{^4003攵阳蹈攵7004攵阳蹈实跚跚科目及补考时间、地点科目及补考时间、地点实跚跚实跚跚程序运行正常。返回子菜单,选择2,程序运行显示2554呈里i2554呈里i高高12

45

折异U

马马109302117耳K律洪基程序运行结果正常。返回子菜单,选择3,程序运行显示升入高年级学生名单及信息:li薨函金菖薮一勇蓿―斯国一境呈—U音109302103109302104109302102109302101109302118109302114109302122109302105109302103109302104109302102109302101109302118109302114109302122109302105109302126109302108109302120109302119109302107109302109109302106109302125109302115109302123109302116109302111109302124109302110109302112109302121109302127打师骨姥哥嫣大宝秋清河阿之0*大誉玉剑嘉灵碧星黑_山正容星红因头6865768608668239968798710857665676777788737776768816678747733291707427394309968668888886978786878688687539898238267269235685076887877889888886788679889957067861912939132938900547675667777876878637966828524786743117135961718608888679898859789768888798程序能正常返回主菜单。(5)调试功能4,程序运行显示创新功能子菜单

选择1,输入乂,按学号查询,程序显示按学号<x>或姓名5,查询:请新X柬查询的学号=109302106回车后程序运行结果正确。按姓名查询如下程序运行正常。当输入一个错误的查询学号,如109302100按学号或姓名5〉查询二祠南学号=109302100苏荏意键继续、程序运行结果正确。返回,选择2,程序运行显示输入1打师哥骨姥基嫣竹大淳之宝秋河大阿复住¥^棉害崖=灵星朱荣正峰坦荽玉剑因春星头紫颜碧延:^山律王瞽阮天耶打师哥骨姥基嫣竹大淳之宝秋河大阿复住¥^棉害崖=灵星朱荣正峰坦荽玉剑因春星头紫颜碧延:^山律王瞽阮天耶611977774433320097739876421999888888888888877776666665排名学号姓名成绩109302104109302103109302109109302110109302105109302126109302111109302101109302123109302122109302108109302120109302121109302119109302125109302127109302113109302115109302106109302124109302107109302118109302114109302102109302112109302116109302117按任意键继续程序运行结果正常。返回选择3,进入密码设置,因先前并无设置密码,因此程序运行显示请输入新密码<不超过15个字符》二输入密码后i直输A新密吗<不超也姑个宝笈"******请啻输入一箱,木超过姑个学特“******回车为了验证密码是否已设置,再进入密码设置请输入密码二返回,结果程序运行,重启,验证是否密码生效程序运行显示请输入密码二此时,在程序启动后,要求输入密码,若密码输入错,则程序显示密曜饕赢入,.输入正常密码后,程序顺利进入主菜单。功能4正常。(6)调试功能5,即关于我们模块,主菜单下,选择5,程序运行显示按任意键后,程序返回到主菜单。关于我们模块正常。(7)主菜单下,选择0,程序自动关闭。(8)主菜单下,输入除0-5外的字符,程序显示d为非法选项,请重新输入?按任意键继续!经过调试,程序功能正常,运行结果正确。第3部分课程设计总结1■个人总结2009110302104C通过这两周的C语言程序设计实训课程,我对C语言中比较基础而实用的部分如:各种语句,数组,循环以及指针等知识进一步加深了解。我们组在经过了这两个星期的努力奋斗后完成了这个学籍管理的程序。在学习c语言3个月后,我们进行了。语言实训,尝试编写一个学籍管理系统。在这为期两周的时间中,我们这些其他组的同学都感受到:C语言实训和平时上课所学是有很大不同的,在这期间我们也受到了许多的困难和挑战。好在搭档们精诚合作,分工明确,共同攻克了。语言实训中许多的困难。而我作为他们中的一员,着实感触颇多。在这次实训中,我对C语言有了一个更深的了解认识,也对这个学期学的知识得到巩固,并且还尝试运行这些编程,在每次运行成功后都会感到一股由衷的欢喜,从而对下一个程序充满期望,这些都令我对C语言编程兴趣增加。在这次实训中,最大的特点就是合作做项目,虽然那只是一个很小的编程。每天大家都来得很早并在一起学习互相取长补短。在实训中我增长了知识提高了学习热情。在实训中我深切体会到了老师认真和热情。让我深受感动。通过这次实训,也使我们发现了多问题。在这次实训中,我们认识到自己还有很多的知识没学好,基础知识没有理清也没有熟练运用,而且许多东西还要去翻书,去上网搜索。而且遇到一些小错误运行不出来,就会烦躁不安,我认为我以后要克服这些问题,尽量保持一颗良好的心态,学好C语言,跟要努力学习以后的课程。首先我要继续学习好C语言的基础知识,并能在电脑上熟练运用。然后每天坚持编写一些编程,上网时候多看一些优秀的教程和优秀的代码。遇到问题时多和同学讨论,并且多进行实习,多锻炼自己编程能力和与同学合作的能力。总之,这一切种种只不过是我人生历程中的一部分,也是在C语言编程上的一个里程碑,总之我会为将来努力奋斗的。2009110302108B通过本次实训对C语言的学习,我掌握了许多有关C语言的知识。在本次实训中,我的C语言知识更加丰富了,比如,对函数的调用有了更深一部的了解,但是还是发现有些知识点掌握不是很劳,所以我会努力学习,掌握所学知识。在实训中,我发现其实错误并不可怕,而且他是通往成功的必经之路,我在刚开始编程时,刚编完一小部分,运行一试,错误竟然达到60多个,当时我就不值所措了,还好我组同学积极帮助我,给我讲解,帮我改正错误。就这样,我在同组同学的帮助下顺利完成了我的编程工作,所以我意识到团队的合作也是非常重要的,只有团队的合作好了,小组的水平才能得到最大的发挥,让每一个人的到最大的提高。我认为学校组织实训的目的有两个,第一是让我们更好的掌握所学的知识,因为之后实践才能更好的让我们把所学的东西记住,之后达到掌握。第二是增强团队意识,学会与人合作,团队合作是一件非常重要的事情,一个团队的人要学会如何发挥每一个队员的长处,每一个人的力量是微薄的,但是一个团队的人的力量合起来就很大,不论是现在的学习还是今后走向社会,团队合作意识是不可缺少的,个人之后完美的融入团队才能发挥出个人的最大力量。以上就是我在这次实训中学到的东西,今后我还会继续努力学习。2009110302134A忙碌了一个多星期,我们总算将程序设计出来,这真是一个坚苦而又漫长的过程啊,这也是我们学了半年了C语言之后的第一次编写这么大的程序啊,看着我们自己做的程序,自己的劳动成果,觉得特别有成就感和自豪感。我很荣幸成为我们组的组长,因为我们组组员的水平参差不齐,所以做为组长,我需要根据组员的具体情况合理地为他们分配任务,由于C和B同学在此方面比较弱,所以我给他们分配比较简单的任务,而自己则负责比较复杂的任务。通过此次C语言程序设计实践,我觉得受益非浅,学到了很多东西。开始设计的时候,不知道要从哪儿下手。结果,一个上午时间内,没做多少东西。终于慢慢的,就有了一些眉目了,后来慢慢的也就把整个程序都做出来的,我们组兴奋不已。虽然整个程序都做出来了,但是我们发现了很多的问题,我们慢慢的细心的仔细寻找问题出错的原因,最后,在我们的努力下,将错误都解决了。为了找出问题的所在,也为了能让程序更完美,我查阅了很多的资料,每一次程序成功的运行,都让我们感到由衷的欢喜。通过这次实训,我学到了很多东西,也让我对C语言程序有了一个更深层次的了解和认识,它不仅让我对过去一学期所学的知识得到了巩固,也让我认识到自己的不足,它让我知道了分工合作的快乐和意义,让我们的知识有了更一步的拓展,这次的实训就像是人生中的一次磨炼,让我成熟了很多。在今后,我还会再努力。2・结束语在两个星期的学习过程中,我们学习到了很多,在我们设计程序的时候,我们的辅导老师孙力红老师给了我们很大的帮助和支持,曹正男同学也给了我们很大的帮助,在此特向他们表示真挚的感谢。附录1程序清单#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>structstudent//定义学生成绩信息数据类型{charnum[15],name[15];intchengji[5];};structbukaoxinxi//定义补考学生补考信息数据类型{chartime1[10],time2[10],time3[10],size1[10],size2[10],size3[10];};voidmyprintf1();//输出主菜单voidmyprintf2();//输出成绩统计子菜单voidmyprintf3();〃输出学籍处理子菜单voidmyprintf4();//输出创新功能子菜单voidmyprintf5();〃输出关于我们内容voidmycreate();//定义录入成绩函数voidpianxu1(structstudentstu[],intn);//定义按学号排序函数(被mytongji函数调用)voidpianxu2(structstudentstu[],intn);//定义按平均分排序函数(被mytongji函数调用)voidpianxu3(structstudentstu[],intn);//定义统计各科分数段函数(被mytongji函数调用)voidmytongji();//定义成绩统计函数voidbukao(structstudentstu[],intn);//定义生成并打印补考通知单(被chulixueji函数调用)voidtuixue(structstudentstu[],intn);//定义生成并打印退学通知单(被chulixueji函数调用)voidshengxue(structstudentstu[],intn);//定义生成并打印新名册(被chulixueji函数调用)voidchulixueji();//定义处理学籍函数voidchaxun(structstudentstu[],intn);//定义查询成绩函数(被函数voidchuanxin()调用)voidxueke(structstudentstu[],intn);//定义学科成绩排名函数(被函数voidchuanxin()调用)voidshezhimima();//定义密码保护函数(被函数voidchuanxin()调用)voidchuanxin();//定义创新功能函数main()//主函数{inta=0,i=0;charchoose='\0',mima0[15]={0},mima1[15]={0},mima2[15]={0},yes_no='\0';structstudentstu[100]={0};FILE*fp=NULL;//指向存放密码的文件printf("\n\n\n===========================\n\n\n\n");printf(-欢迎使用学籍管理系统\n\n\n\n");printf("按任意键继续\n\n");printf("===========================\n\n\n");getch();system("cls");//清屏fp=fopen("mima.dat","a");fclose(fp);//确保mina.dat文件的存在fp=fopen("mima.dat","r");fscanf(fp,”%s”,&mima1);if(strcmp(mima1,"")!=0){do{system("cls");printf("\n\n\n\n\n\n");printf("请输入密码:");i=0;while((mima2[i]=getch())!='\r'){printf("*");i++;}mima2[i]='\0';printf("\n");if(strcmp(mima1,mima2)!=0){printf("密码错误,请重新输入!");getch();}}while(strcmp(mima1,mima2)!=0);fclose(fp);}〃验证密码do{myprintf1();printf("");choose=getch();printf("\n");switch(choose){case'1':/*录入成绩*/mycreate();break;case'2':/*统计成绩*/mytongji();break;case'3':/*处理学籍*/chulixueji();break;case'4':/*创新功能*/chuanxin();break;case'5':/*关于我们*/myprintf5();break;case'0':/*退出系统*/{system("cls");printf("\n\n\n\n\n\n\n============================\n感谢使用本软件,已正常退出,按任意键结束!\n============================\n\n\n\n");};exit(0);default:{printf("%c为非法选项,请重新输入!按任意键继续!\n",choose);getch();};}}while(choose!='0');}//主函数结束voidmyprintf1()//输出主菜单{system("cls");//清屏printf("\n\n\n=========================\n");printf("请输入选项编号(0~5):\n");printf("=========================\n");printf("1--录入成绩\n");printf("2--统计成绩");printf("3--处理学籍\n");printf("4--创新功能");printf("5--关于我们\n");printf("0--退出系统^”);printf("=========================\n");}voidmyprintf2()//输出成绩统计子菜单{system("cls");//清屏printf("\n\n\n=========================\n");printf("请输入选项编号(0~4):\n");printf("=========================\n");printf(-1--按学号排序\n");printf("2--计算平均分并排序\n");printf("3--统计平均分数段\n");printf("4--返回\n");printf("0--退出系统\^);printf("=========================\n");}voidmyprintf3()//输出学籍处理子菜单{system("cls");//清屏printf("\n\n\n=========================\n");printf("请输入选项编号(0~4):\n");printf("=========================\n");printf("1--生成并打印补考通知单\n");printf("2--造成并打印退学通知单\n");printf("3--造成并打印新名册\n");printf("4--返回\n");printf("0--退出系统\^);printf("=========================\n");}voidmyprintf4()//输出创新功能子菜单{system("cls");//清屏printf("\n\n\n=========================\n");printf("请输入选项编号(0~4):\n");printf("=========================\n");printf("1--查询成绩");printf("2--按学科成绩排名\n");printf("3--密码保护\n");printf("4--返回\n");printf("0--退出系统\^);printf("=========================\n");}voidmyprintf5()//输出关于我们内容{system("cls");//清屏printf("\n\n");printf("============================\n");printf("关于我们");printf("============================\n\n\n");printf("北京联合大学0911030201班\n\n");printf("20091103020104C\n");printf("20091103020108B\n");printf("20091103020134A\n\n\n");printf("============================\n");printf("反对盗版!盗版必究!\n\n");printf("按任意键返回!\n");printf("============================\n");getch();return;}voidmycreate()//定义录入成绩函数{charyes_no='\0',a[15]={0};structstudenttemp={0};FILE*fp=NULL;system("cls");//清屏fp=fopen("chengji.dat”,"a”);fclose(fp);//确保chengji.dat文件存在fp=fopen(”chengji.dat”,”r”);fscanf(fp,”%s”,&a);fclose(fp);if(strcmp(a,"")!=0)//判断是否已经有记录{printf(-\n成绩单中已有记录,是否继续录入(Y/N)?");do{yes_no=getche();if(yes_no='N'llyes_no='n'){printf("\n");return;}}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');printf("\n");}fp=fopen("chengji.dat”,"a”);do{fflush(stdin);//清除缓存printf("请输入学生的成绩:\n");printf("学号(按#结束输入):");do{gets(temp.num);}while(strcmp(temp.num,"")==0);printf("姓名(按#结束输入):");do{gets();}while(strcmp(,"")==0);printf(-请依次输入高数、英语、物理、编程、马哲成绩:,scanf("%d%d%d%d%d”,&temp.chengji[0],&temp.chengji[1],&temp.chengji[2],&temp.chengji[3],&temp.chengji[4]);if(temp.num[0]!='#'&&[0]!='#')fprintf(fp,"%s%s%d%d%d%d%d\n”,temp.num,,temp.chengji[0],temp.chengji[1],temp.chengji[2],temp.chengji[3],temp.chengji[4]);}while(temp.num[0]!='#'&&[0]!='#');fclose(fp);}voidpianxu1(structstudentstu[],intn)//定义按学号排序函数(被mytongji函数调用){inti=0,k=0,j=0;charyes_no='\0';structstudentt={0};FILE*fp=NULL;system("cls");//清屏for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(strcmp(stu[k].num,stu[j].num)>0)k=j;t=stu[k];stu[k]=stu[i];stu[i]=t;}fp=fopen(”std.dat”,”w”);printf("\n==============================\n");printf("学号姓名高数英语物理编程马哲\n");printf("\n");for(i=0;i<n;i++){printf("%-15s%-15s%5d%5d%5d%5d%5d\n”,stu[i].num,stu[i].name,stu[i].chengji[0],stu[i].chengji[1],stu[i].chengji[2],stu[i].chengji[3],stu[i].chengji[4]);fprintf(fp,"%s%s%d%d%d%d%d\n”,stu[i].num,stu[i].name,stu[i].chengji[0],stu[i].chengji[1],stu[i].chengji[2],stu[i].chengji[3],stu[i].chengji[4]);}printf("==============================\n");fclose(fp);printf("\n此名单已经写入std.dat文件中,要继续选择吗(Y/N)?”);do{yes_no=getche();if(yes_no=='N'||yes_no='n'){printf("\n");system("cls");//清屏printf("\n\n\n\n\n\n\n============================\n");printf("感谢使用本软件,已正常退出,按任意键结束!\n");printf("============================\n\n\n\n");exit(0);}}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');printf("\n");}voidpianxu2(structstudentstu[],intn)//定义按平均分排序函数(被mytongji函数调用){inti=0,k=0,j=0;floatave[100]={0},t1;charyes_no='\0';structstudentt2;FILE*fp=NULL;system("cls");//清屏fp=fopen("sort.dat","w");for(i=0;i<n;i++)ave[i]=(stu[i].chengji[0]+stu[i].chengji[1]+stu[i].chengji[2]+stu[i].chengji[3]+stu[i].chengji[4])/5.0;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(ave[k]<ave[j])k=j;t2=stu[k];stu[k]=stu[i];stu[i]=t2;t1=ave[k];ave[k]=ave[i];ave[i]=t1;}printf("==================================\n");printf("学号姓名高数英语物理编程马哲平均分^,printf("\n");for(i=0;i<n;i++){printf("%-15s%-15s%5d%5d%5d%5d%5d%5.1f\n”,stu[i].num,stu[i].name,stu[i].chengji[0],stu[i].chengji[1],stu[i].chengji[2],stu[i].chengji[3],stu[i].chengji[4],ave[i]);fprintf(fp,"%s%s%d%d%d%d%d%f\n”,stu[i].num,stu[i].name,stu[i].chengji[0],stu[i].chengji[1],stu[i].chengji[2],stu[i].chengji[3],stu[i].chengji[4],ave[i]);}printf("==================================\n");fclose(fp);printf("\n此名单已经写入sort.dat文件中,要继续选择吗(Y/N)?");do{yes_no=getche();if(yes_no=='N'||yes_no='n'){printf("\n");system("cls");//清屏printf("\n\n\n\n\n\n\n============================\n");printf("感谢使用本软件,已正常退出,按任意键结束!\n");printf("============================\n\n\n\n");exit(0);}}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');printf("\n");}voidpianxu3(structstudentstu[],intn)//定义统计各科分数段函数(被mytongji函数调用){inti=0,gaoshu[5]={0},english[5]={0},wuli[5]={0},biancheng[5]={0},mazhe[5]={0};charyes_no='\0';system("cls");//清屏for(i=0;i<n;i++)//统计高数各分数段的人数{if(stu[i].chengji[0]/10<6)gaoshu[4]++;else{if(stu[i].chengji[0]/10==10)gaoshu[0]++;elsegaoshu[9-(stu[i].chengji[0]/10)]++;}}for(i=0;i<n;i++)//统计英语各分数段的人数{if(stu[i].chengji[1]/10<6)english[4]++;else{if(stu[i].chengji[1]/10==10)english[0]++;elseenglish[9-(stu[i].chengji[1]/10)]++;}}for(i=0;i<n;i++)//统计物理各分数段的人数{if(stu[i].chengji[2]/10<6)wuli[4]++;else{if(stu[i].chengji[2]/10==10)wuli[0]++;elsewuli[9-(stu[i].chengji[2]/10)]++;}}for(i=0;i<n;i++)//统计编程各分数段的人数{if(stu[i].chengji[3]/10<6)biancheng[4]++;else{if(stu[i].chengji[3]/10==10)biancheng[0]++;elsebiancheng[9-(stu[i].chengji[3]/10)]++;}}for(i=0;i<n;i++)//统计马哲各分数段的人数{if(stu[i].chengji[4]/10<6)mazhe[4]++;else{if(stu[i].chengji[4]/10==10)mazhe[0]++;elsemazhe[9-(stu[i].chengji[4]/10)]++;}printf("\n\n\n\n\n=—\n);printf("各门课、各分数段学生的人数\n”);printf("\n");printf("科目90分以上80〜89分70〜79分60〜69分60分以T\n");printf("\n");printf("高数%2d%2d%2d%2d%d\n",gaoshu[0],gaoshu[1],gaoshu[2],gaoshu[3],gaoshu[4]);printf("英语%2d%2d%2d%2d%d\n",english[0],english[1],english[2],english[3],english[4]);printf("物理%2d%2d%2d%2d%d\n",wuli[0],wuli[1],wuli[2],wuli[3],wuli[4]);printf("编程%2d%2d%2d%2d%d\n",biancheng[0],biancheng[1],biancheng[2],biancheng[3],biancheng[4]);printf("马哲%2d%2d%2d%2d%d\n",mazhe[0],mazhe[1],mazhe[2],mazhe[3],mazhe[4]);printf("============================\n");printf("\n要继续选择吗(Y/N)?”);do{yes_no=getche();if(yes_no='N'llyes_no='n'){printf("\n");system("cls”);//清屏printf("\n\n\n\n\n\n\n============================\n");printf("感谢使用本软件,已正常退出,按任意键结束!\n");printf("============================\n\n\n\n");exit(0);}}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');printf("\n");}voidmytongji()//定义统计统计函数{charchoose='\0';inti=0;structstudentstu[100];FILE*fp=NULL;system("cls");//清屏fp=fopen("chengji.dat","r");if(fp==NULL){printf("找不到文件!\n");exit(0);}while(feof(fp)==0){fscanf(fp,"%s%s%d%d%d%d%d\n”,&stu[i].num,&stu[i].name,&stu[i].chengji[0],&stu[i].chengji[1],&stu[i].chengji[2],&stu[i].chengji[3],&stu[i].chengji[4]);i++;}do{myprintf2();printf("");choose=getch();printf("\n");switch(choose){case'1':pianxu1(stu,i);break;case'2':pianxu2(stu,i);break;case'3':pianxu3(stu,i);break;case'4':return;case'0':{system("cls");printf("\n\n

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论