




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学生学籍信息管理系统目录1.设计目的与要求2.总体设计3.详细设计4.调试分析5.总结6.辩论记录7.教师意见8.附录主程序1.设计目的与要求:1.1【要求】:使用下面的数据,设计一个简单的学籍信息管理系统。学生根本信息文件(A.TXT)及其内容:A.TXT文件不需要编程录入数据,可用文本编辑工具直接生成学号姓名性别宿舍号码号码01张成成男5018773211102李成华女1018772311203王成凤女1018772311204张明明男5028773433305陈东男5018773211106李果男5028773433307张园园女10287756122学生成绩根本信息文件(B.TXT)及其内容学号课程编号课程名称学分平时成绩实验成绩卷面成绩综合成绩学分01A01大学物理366788202B03高等数学478-19001B03高等数学445-18802C01VF3657666功能要求及说明:数据录入功能:对B.TXT进行数据录入,只录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据.综合成绩、学分由程序根据条件自动运算。综合成绩的计算:如果本课程的实验成绩为-1,那么表示无实验,综合成绩=平时成绩*30%+卷面成绩*70%;如果实验成绩不为-1,表示本课程有实验,综合成绩=平时成绩*15%+实验成绩*.15%+卷面成绩*70%。实综合成绩在90-100之间,应得学分=学分*100%得学分的计算:采用等级学分制.综合成绩在80-90之间,应得学分=学分*80%综合成绩在70-80之间,应得学分=学分*75%综合成绩在60-70之间,应得学分=学分*60%综合成绩在60以下,应得学分=学分*0%〔2〕查询功能:分为学生根本情况查询和成绩查询两种A:学生根本情况查询:A1----输入一个学号或姓名〔可实现选择〕,查出此生的根本信息并显示输出。A2---输入一个宿舍号码,可查询出本室所有的学生的根本信息并显示输出。B:成绩查询:B1:输入一个学号时,查询出此生的所有课程情况,格式如下:学号:xx姓名:xxxxx课程编号:xxx课程名称:xxxxx综合成绩:xxxx实得学分:xx课程编号:xxx课程名称:xxxxx综合成绩:xxxx实得学分:xx课程编号:xxx课程名称:xxxxx综合成绩:xxxx实得学分:xx共修:xx科,实得总学分为:xxx〔3〕删除功能:当在A.TXT中删除一个学生时,自动地在B.TXT中删除此人所有信息。〔4〕排序功能:能实现选择按综合成绩或实得学分升序或降序排序并显示数据1.2【目的】:实现对于学生学籍信息的查询以及管理。自动录入,方便快捷。数据录入功能,综合成绩的计算,查询功能〔学生根本情况查询,成绩查询〕,删除功能,排序功能等为一体。使学生学籍和成绩等信息实现信息化快捷管理。2.总体设计:经过分析整个系统,可以将系统分为五大模块:信息输入模块,信息修改模块,信息排序模块,设备查找模块和退出模块。其中主要是前五大个模块。所用到的各个子函数所用到的各个子函数读取数据、计算菜单显示数据录入排序查询读取数据、计算菜单显示数据录入排序查询按实际学分按综合成绩查询成绩查询学生信息按实际学分按综合成绩查询成绩查询学生信息3.详细设计:3.1主函数://******主函数******#include<stdio.h>#include<string.h>#include<stdlib.h>#include<conio.h>#include<malloc.h>voidmenu(){intc,w1;do{puts("\t\t*********************MENU*********************\n\n");puts("\t\t\t\t1.Inputdata");/*输入模块*/puts("\t\t\t\t2.Searchdata");/*查找模块*/puts("\t\t\t\t3.Deletedata");/*删除模块*/puts("\t\t\t\t4.Sortdata");/*排序模块*/puts("\t\t\t\t5.Exit");/*退出*/puts("\n\n\t\t**********************************************\n");printf("Choicenumber(1-5):[]\b\b");scanf("%d",&c);if(c<1||c>6) { w1=1;getchar(); }elsew1=0;}while(w1==1);switch(c){case1:enter();break;case2:search();break;case3:del();break;case4:sort();break;case5:exit(0);break;}}voidmain(){menu();}3.2公共函数:所用到的六个公共函数所用到的六个公共函数一个函数结束时的选择浏览还是返回的函数显示数据结构工程的函数保存文件B函数加载文件B函数 保存文件A函数加载文件A函数一个函数结束时的选择浏览还是返回的函数显示数据结构工程的函数保存文件B函数加载文件B函数 保存文件A函数加载文件A函数intload_info()/*A文件加载函数*/{inti;FILE*fp;if((fp=fopen("A.txt","r"))==NULL){printf("\nCannotopenfile\n");return0;}for(i=0;!feof(fp);i++)fscanf(fp,"%s%s%s%s%s",stu[i].num,stu[i].name,stu[i].sex,stu[i].room,stu[i].tel);fclose(fp);return(i);}intsave_info(intn)/*A文件保存函数*/{inti;FILE*fp;if((fp=fopen("A.txt","w"))==NULL){printf("\nCannotopenfile\n");return0;}for(i=0;i<n;i++)if(strcmp(stu[i].num,"-1")!=0)fprintf(fp,"%s%s%s%s%s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].room,stu[i].tel);fclose(fp);}intload_score()/*B文件加载函数*/{floatca_mark(inti);voidca_score(inti);inti,j;FILE*fp;if((fp=fopen("B.txt","r"))==NULL){printf("\nCannotopenfile\n");return0;}for(i=0;!feof(fp);i++){fscanf(fp,"%s%s%s%d",scr[i].num,scr[i].subnum,scr[i].subject,&scr[i].oscore);for(j=0;j<3;j++)fscanf(fp,"%d",&scr[i].mark[j]);ca_mark(i);ca_score(i);}fclose(fp);return(i);}intsave_score(intm)/*B文件保存函数*/{inti,j;FILE*fp;if((fp=fopen("B.txt","w"))==NULL){printf("\nCannotopenfile\n");return0;}for(i=0;i<m;i++){if(strcmp(scr[i].num,"-1")!=0) {fprintf(fp,"%s%s%s%d%d%d%d%d%d\n",scr[i].num,scr[i].subnum,scr[i].subject,scr[i].oscore,scr[i].mark[0],scr[i].mark[1],scr[i].mark[2],(int)scr[i].totalmark,(int)scr[i].gscore); }}fclose(fp);}voidprintone(inti)/*显示数据结构工程的函数(公共函数)*/{printf("\n\t%-4s\t%-6s\t%-4s\t%-8s\t%-8s",stu[i].num,stu[i].name,stu[i].sex,stu[i].room,stu[i].tel);}voidprintface()/*公共函数,一个函数结束时的选择浏览还是返回的函数*/{printf("\n\t学号\t姓名\t性别\t宿舍号码\t号码\n");}3.3功能模块的设计://///*******信息删除模块********开始开始数据删除结束输入学号voiddel()//删除模块{voidmenu();inti,j,c,flag=0;chars[6];printface();for(i=0;i<n;i++)printone(i);puts("\n\n");printf("\nInputthedeletenumber:");scanf("%s",s); printf("\n\nSure?\t1).Sure\t2).No\t3).Back\t[]\b\b");scanf("%d",&c);if(c==1)for(i=0;i<n;i++)if(judge(s,stu[i].num)) { flag=1;strcpy(stu[i].num,"-1");for(j=0;j<m;j++)if(judge(s,scr[i].num))strcpy(scr[i].num,"-1"); break; }if(flag==0){puts("\n\tNotexist!\n");choice_menu(5);}if(c==2){puts("\n\n");del();}if(c==3){puts("\n\n");menu();}save_info(n);save_score(m);load_info();load_score();puts("\n\n\tSuccessfully!.^_^.\n");choice_menu(5);}/////*******开始数据排序开始数据排序X=1?实际学分排序综合成绩排序结束YNvoidsort()//排序模块{voidmenu();intc,k,v; printf("\n\nChoicenumber:1).综合成绩\t2).实得学分\t[]\b\b");scanf("%d",&c);list_subject();scanf("%d",&k);printf("\n\nChoice:1).从高到低\t2).从低到高\t[]\b\b");scanf("%d",&v);sortmark(c,k,v);}voidsortmark(intc,intk,intv){ char*num_name(chars[]);intjudge(chara[],charb[]);chars[4];inti,j=0,i1,j1,k1;structscore*p[100],*t;switch(k){case1:strcpy(s,"A01");break;case2:strcpy(s,"B03");break;case3:strcpy(s,"C01");break;case4:strcpy(s,"D02");break;}for(i=0;i<m;i++)p[i]=NULL;for(i=0;i<m;i++)if(judge(s,scr[i].subnum)){p[j]=&scr[i];j++;}for(i1=0;i1<j-1;i1++){k1=i1;if(c==1)for(j1=i1+1;j1<j;j1++)if(p[k1]->totalmark<p[j1]->totalmark)k1=j1;if(c==2)for(j1=i1+1;j1<j;j1++)if(p[k1]->gscore<p[j1]->gscore)k1=j1;if(i1!=k1){t=p[i1];p[i1]=p[k1];p[k1]=t;}}puts("\n名次姓名\t平时成绩实验成绩卷面成绩综合成绩实得学分");if(v==1)for(i=0;i<j;i++)printf("%-4d%-8s&%-8d%-8d%-8d%-8.2f%-4.2f",i+1,num_name(p[i]->num),p[i]->mark[0],p[i]->mark[1],p[i]->mark[2],p[i]->totalmark,p[i]->gscore);if(v==2)for(i=j-1;i>=0;i++)printf("%-4d%-8s&%-8d%-8d%-8d%-8.2f%-4.2f",i+1,num_name(p[i]->num),p[i]->mark[0],p[i]->mark[1],p[i]->mark[2],p[i]->totalmark,p[i]->gscore);}4.调试分析4.1主函数:4.2排序模块4.3删除模块4.4退出5.总结先就在本程序的编写过程中出现的问题进行说明:首先,对于数据的删除存在一定的问题,这个问题是在老师的指导下又经过同学们的帮助才解决的,其间,我明白了结构体数组中数据删除的根本原理和删除的方法;其次,在程序编写过程中,我无视了几个需要注意的根本语法,比方,有的变量忘记了定义和标识符的使用等问题,这个是在同学的帮助下才检查出来改正的。这属于C语言运用的根底问题,也是因为平时的上机编程实习太少所致,以后还有待于改良;第三,对于数组中数据的存储原理存在一定的疑问,这个是请同学讲解后才加深的理解;第四,就是在程序开始编写时,整体思路框架的构思感觉无从下手,这是一个长期的问题,需要多多接触程序,理解更多的程序编写思路才能做到在白那些之前胸有成竹。这次是请教同学帮助才得以解决的。这是我第一次相比照拟独立的编程,从中感受到了小小的进步所带来的喜悦,更重要的是,通过这次C语言课程设计我意识到了自己在学习上的许多缺乏,许多感觉会的知识在应用时还是有许多不确定,学习C语言,动手能力是很重要的,只要通过实践才能真正发现自己的缺乏,使自己的能力真正有所提高。俗话说:“万事开头难。〞现在既然开头已经过去了,也大致了解了C语言的学习规律,课本虽然学完了,但自己需要加强与完善的还有很多。首先,从这个程序说起。这个程序的编写过程中没有用到很特殊的算法,根本都是老师上课强调的一些根本算法,让人做起来感觉还是挺简单易懂的,这里也体会到了C语言的灵活性。其次,我认为我这个程序的亮点在于它的整体结构清晰明朗,首先是两个结构体,然后就是声明函数,再往下是主函数选择执行命令,最后是几个用到的被调用函数。再次,我体会到了计算机语言的严谨性,C语言课本上的许多微小知识看似微乎其微,实那么作用巨大,在程序设计过程中,一处小小的知识死角就可能会使整个程序无法运行,所以计算机语言的学习容不得半点儿马虎,留不得半处死角,不能无视任何一处知识。此次课程设计,我在编写程序,修改程序进一步完成作业的同时,也深深感受到了计算机高级语言的清晰的层次性和运用的技巧性,我想这一点无论对于我们这些初涉计算机语言的学生而言,还是对于已在计算机专业任教多年的资深教师来说,都是必须认识到的。认识到这一点,计算机初学者可以在稳固根底的同时培养探索更加简洁的思路的意识,资深教师那么可以在计算机语言教授过程中起到提纲挈领,诱思探究新的教学方法,使学生在学习计算机语言的时候抓住重点,理解难点,掌握要点。姓名:黄樊学号:051111272023-9-6辩论记录教师意见附录一:源程序代码#include<stdio.h>#include<string.h>#include<stdlib.h>#include<conio.h>#include<malloc.h>intn,m;structstudent{charnum[6];charname[20];charsex[3];charroom[5];chartel[10];}stu[10];structscore{ charnum[6];charsubnum[4];charsubject[10];intoscore;intmark[3];floattotalmark;floatgscore;}scr[60];floatca_mark(inti){if(scr[i].mark[1]==-1)scr[i].totalmark=0.3*scr[i].mark[0]+0.7*scr[i].mark[2];elsescr[i].totalmark=0.15*(scr[i].mark[0]+scr[i].mark[1])+0.7*scr[i].mark[2];return(scr[i].totalmark);}voidca_score(inti){intc;c=(int)ca_mark(i)/10;if(c<6)c=5;switch(c){case10:case9:scr[i].gscore=scr[i].oscore;break;case8:scr[i].gscore=0.8*scr[i].oscore;break;case7:scr[i].gscore=0.75*scr[i].oscore;break;case6:scr[i].gscore=0.6*scr[i].oscore;break;case5:scr[i].gscore=0;break;}}intload_info()//加载函数{inti;FILE*fp;if((fp=fopen("A.txt","r"))==NULL){printf("\nCannotopenfile\n");return0;}for(i=0;!feof(fp);i++)fscanf(fp,"%s%s%s%s%s",stu[i].num,stu[i].name,stu[i].sex,stu[i].room,stu[i].tel);fclose(fp);return(i);}intsave_info(intn)//保存函数{inti;FILE*fp;if((fp=fopen("A.txt","w"))==NULL){printf("\nCannotopenfile\n");return0;}for(i=0;i<n;i++)if(strcmp(stu[i].num,"-1")!=0)fprintf(fp,"%s%s%s%s%s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].room,stu[i].tel);fclose(fp);}intload_score()//加载函数{floatca_mark(inti);voidca_score(inti);inti,j;FILE*fp;if((fp=fopen("B.txt","r"))==NULL){printf("\nCannotopenfile\n");return0;}for(i=0;!feof(fp);i++){fscanf(fp,"%s%s%s%d",scr[i].num,scr[i].subnum,scr[i].subject,&scr[i].oscore);for(j=0;j<3;j++)fscanf(fp,"%d",&scr[i].mark[j]);ca_mark(i);ca_score(i);}fclose(fp);return(i);}intsave_score(intm)//保存函数{inti,j;FILE*fp;if((fp=fopen("B.txt","w"))==NULL){printf("\nCannotopenfile\n");return0;}for(i=0;i<m;i++){if(strcmp(scr[i].num,"-1")!=0) {fprintf(fp,"%s%s%s%d%d%d%d%d%d\n",scr[i].num,scr[i].subnum,scr[i].subject,scr[i].oscore,scr[i].mark[0],scr[i].mark[1],scr[i].mark[2],(int)scr[i].totalmark,(int)scr[i].gscore); }}fclose(fp);}voidprintone(inti){printf("\n\t%-4s\t%-6s\t%-4s\t%-8s\t%-8s",stu[i].num,stu[i].name,stu[i].sex,stu[i].room,stu[i].tel);}voidprintface(){printf("\n\t学号\t姓名\t性别\t宿舍号码\t号码\n");}voidlist_subject(){puts("\n\nChoicesubject:\n");printf("\t1).大学物理\t2).高等数学\t3).VF\t4).大学英语\n");printf("\nChoicenumber(1-4):[]\b\b");}voidsortmark(intc,intk,intv){ char*num_name(chars[]);intjudge(chara[],charb[]);chars[4];inti,j=0,i1,j1,k1;structscore*p[100],*t;switch(k){case1:strcpy(s,"A01");break;case2:strcpy(s,"B03");break;case3:strcpy(s,"C01");break;case4:strcpy(s,"D02");break;}for(i=0;i<m;i++)p[i]=NULL;for(i=0;i<m;i++)if(judge(s,scr[i].subnum)){p[i]=&scr[i];j++;}for(i1=0;i1<j-1;i1++){k1=i1;if(c==1)for(j1=i1+1;j1<j;j1++)if(p[k1]->totalmark<p[j1]->totalmark)k1=j1;if(c==2)for(j1=i1+1;j1<j;j1++)if(p[k1]->gscore<p[j1]->gscore)k1=j1;if(i1!=k1){t=p[i1];p[i1]=p[k1];p[k1]=t;}}puts("\n名次姓名\t平时成绩实验成绩卷面成绩综合成绩实得学分");if(v==1)for(i=0;i<j;i++)printf("%-4d%-8s&%-8d%-8d%-8d%-8.2f%-4.2f",i+1,num_name(p[i]->num),p[i]->mark[0],p[i]->mark[1],p[i]->mark[2],p[i]->totalmark,p[i]->gscore);if(v==2)for(i=j-1;i>=0;i++)printf("%-4d%-8s&%-8d%-8d%-8d%-8.2f%-4.2f",i+1,num_name(p[i]->num),p[i]->mark[0],p[i]->mark[1],p[i]->mark[2],p[i]->totalmark,p[i]->gscore);}intjudge(chara[],charb[]){if(strcmp(a,b)==0)return1;elsereturn0;}char*num_name(chars[]){char*p;inti;for(i=0;i<n;i++)if(judge(s,stu[i].num)) { p=stu[i].num+6;return(p);break; }}voidsearchone(intk){voidchoice_menu(intk);chars[20];inti,flag=0;if(k==1){printf("\nInputthenumber:");}if(k==2){printf("\nInputthename:");}scanf("%s",s);for(i=0;i<n;i++){ if(k==1) if(judge(s,stu[i].num)) {printface();printone(i); flag=1;puts("\n\n\tSuccessfully!\n");choice_menu(k); }if(k==2)if(judge(s,stu[i].name)) {printface();printone(i); flag=1;puts("\n\n\tSuccessfully!\n");choice_menu(k); }}if(flag==0&&k==1)puts("\n\n\tNotexist!\n");if(flag==0&&k==2)puts("\n\n\tNotexist!\n");choice_menu(k);}voidsearchroom()//按寝室查询{voidchoice_menu(intk);inti,flag=0;chars[3];printf("\nInputtheroomnumber:");scanf("%s",s);printface();for(i=0;i<n;i++)if(judge(s,stu[i].room)){printone(i);flag=1;}puts("\n");if(flag==0)puts("\n\n\tNotexist!\n");choice_menu(3);}voidsearch_onescore()//成绩查询{voidchoice_menu(intk);inti,j=0,flag=0;chars[6];floatsum;printf("\nInputthenumber:");scanf("%s",s);for(i=0,sum=0;i<m;i++){if(judge(s,scr[i].num)) {if(j==0)printf("\n\n学号:%-6s\t姓名:%s",s,num_name(s));printf("\n课程编号:%-6s\t课程名称:%-10s\t综合成绩:%-6.2f\t实得学分:%-4.2f",scr[i].subnum,scr[i].subject,scr[i].totalmark,scr[i].gscore);sum+=scr[i].gscore;flag=1;j++; }}if(flag==1)printf("\n共修:%d科,实得总学分为:%-6.2f\n",j,sum);if(flag==0)puts("\n\nNotexist!\n");choice_menu(4);}voidsearch_choice(intk)//查找选项{voiddel();switch(k){case1:case2:searchone(k);break;case3:searchroom();break;case4:search_onescore();break;case5:del();break;}}voidsearch_info(){voidsearch_person();voidsearch();intc;puts("\t\t\t\t1.Byperson");puts("\t\t\t\t2.Byroom");puts("\t\t\t\t3.Back");printf("\n\nChoicenumber(1-3):[]\b\b");scanf("%d",&c);switch(c){case1:search_person();break;case2:searchroom();break;case3:search();}}voidsearch_person()//按人查找{intc;puts("\t\t\t\t1.Bynumber");puts("\t\t\t\t2.Byname");puts("\t\t\t\t3.Back");printf("\n\nChoicenumber(1-3):[]\b\b");scanf("%d",&c);switch(c){case1:case2:searchone(c);break;case3:search_info();}}voidchoice_menu(intk){voidsearch();voidmenu();voidmenu();intc,w;puts("\nWhatdoyouwanttodo?:\n");switch(k){case1:puts("\n\t1).继续按学号查询");break;case2:puts("\n\t1).继续按姓名查询");break;case3:puts("\n\t1).继续按宿舍号码查询");break;case4:puts("\n\t1).继续查询成绩");break;case5:puts("\n\t1).continue");break;}printf("\t2).Return\n\t3).Backtomenu\n\n\tChoicenumber:[]\b\b");scanf("%d",&c);switch(c){case1:search_choice(k);break;case2:search();break;case3:menu();break;}}voidenter()//录入模块{voidmenu();n=load_info();m=load_score();puts("\nSuccessful!.^_^.\nPressanykeytocontinue...");getch();menu();}voidsearch()//查找菜单{voidmenu();intc;puts("\t\t\t\t1.Basicinformation");puts("\t\t\t\t2.Searchscore");puts("\t\t\t\t3.Back");printf("\n\nChoicenumber(1-3):[]\b\b");scanf("%d",&c);switch(c){case1:search_info();break;case2:search_onescore();break;case3:menu();}}voiddel()//删除模块{voidmenu();inti,j,c,flag=0;chars[6];printface();for(i=0;i<n;i++)printone(i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025商业街店铺租赁合同
- 《经济学院概况》课件
- 《特种车辆》课件
- 《屋面防漏QC成果》课件
- 鹰潭市重点中学2025年中考生物试题3年中考模拟题透析2年模拟试题含解析
- 新疆维吾尔巴音郭楞蒙古自治州轮台县2024-2025学年五年级数学第二学期期末经典模拟试题含答案
- 苏州城市学院《保险法案例分析》2023-2024学年第二学期期末试卷
- 山东轻工职业学院《临床医学概论Ⅱ》2023-2024学年第一学期期末试卷
- 日照市2025年初三第一次联考物理试题文试题含解析
- 南京栖霞区摄山中学2024-2025学年初三下学期期初学情调研考试英语试题试卷含答案
- 留守儿童帮扶记录表
- 自动打铃控制器plc课程设计
- 最新司法鉴定程序通则课件来源于司法部司法鉴定局
- 变电站第二种工作票
- 机电一体化专业毕业论文43973
- 基于PLC的变频中央空调温度控制系统的毕业设计
- 门禁系统调试报告(共4页)
- 北师大版一年级英语下册期中测试卷
- 档案学概论重点知识梳理
- 地下连续墙钢筋笼起重吊装专项施工方案
- 变压器容量与母排选型配合表81035
评论
0/150
提交评论