《学生学籍信息管理系统---C语言设计(共34页).doc》由会员分享,可在线阅读,更多相关《学生学籍信息管理系统---C语言设计(共34页).doc(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上 学生学籍信息管理系统 目录1.设计目的与要求2.总体设计3.详细设计4.调试分析5.总结6.答辩记录7.教师意见8.附录主程序专心-专注-专业 1.设计目的与要求:1.1 【要求】:使用下面的数据,设计一个简单的学籍信息管理系统。学生基本信息文件(A.TXT)及其内容:A.TXT文件不需要编程录入数据,可用文本编辑工具直接生成学号 姓名 性别 宿舍号码 电话号码01 张成成 男 501 02 李成华 女 101 03 王成凤 女 101 04 张明明 男 502 05 陈东 男 501 06 李果 男 502 07 张园园 女 102 学生成绩基本信息文件(B.TX
2、T)及其内容学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩 综合成绩 学分01 A01 大学物理 3 66 78 8202 B03 高等数学 4 78 -1 9001 B03 高等数学 4 45 -1 8802 C01 VF 3 65 76 66功能要求及说明:(1) 数据录入功能: 对B.TXT进行数据录入,只录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据. 综合成绩、学分由程序根据条件自动运算。(2) 综合成绩的计算: 如果本课程的实验成绩为-1,则表示无实验,综合成绩=平时成绩*30%+卷面成绩*70%; 如果实验成绩不为-1,表示本课
3、程有实验,综合成绩=平时成绩*15%+实验成绩*.15%+卷面成绩*70%。实综合成绩在90-100之间 ,应得学分=学分*100%得学分的计算: 采用等级学分制.综合成绩在80-90之间 ,应得学分=学分*80%综合成绩在70-80之间 ,应得学分=学分*75%综合成绩在60-70之间 ,应得学分=学分*60%综合成绩在60以下 ,应得学分=学分*0%(2)查询功能:分为学生基本情况查询和成绩查询两种 A:学生基本情况查询:A1-输入一个学号或姓名(可实现选择),查出此生的基本信息并显示输出。A2-输入一个宿舍号码,可查询出本室所有的学生的基本信息并显示输出。B:成绩查询:B1:输入一个学号
4、时,查询出此生的所有课程情况,格式如下:学 号:xx 姓 名:xxxxx课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx共修:xx科,实得总学分为: xxx (3)删除功能:当在A.TXT中删除一个学生时,自动地在B.TXT中删除此人所有信息。 (4)排序功能:能实现选择按综合成绩或实得学分升序或降序排序并显示数据1.2 【目的】:实现对于学生学籍信息的查询以及管理。自动录入,方便快捷。数据录入功能,综合成绩的计算,
5、查询功能(学生基本情况查询,成绩查询),删除功能,排序功能等为一体。使学生学籍和成绩等信息实现信息化快捷管理。2.总体设计: 经过分析整个系统,可以将系统分为五大模块:信息输入模块,信息修改模块,信息排序模块,设备查找模块和退出模块。其中主要是前五大个模块。所 用 到 的 各 个 子 函 数读取数据、计算菜 单 显 示数 据 录 入排 序查 询按 实 际 学 分按 综 合 成 绩查 询 成 绩查询 学生 信息3.详细设计:3.1主函数:/*主函数*#include #include #include #include #include void menu() int c,w1; do puts
6、(tt*MENU*nn); puts(tttt 1.Input data); /*输入模块*/ puts(tttt 2.Search data); /*查找模块*/ puts(tttt 3.Delete data); /*删除模块*/ puts(tttt 4.Sort data); /*排序模块*/ puts(tttt 5.Exit); /*退出*/ puts(nntt*n); printf(Choice number(1-5): bb); scanf(%d,&c); if(c6) w1=1; getchar(); else w1=0; while(w1=1); switch(c) case
7、1:enter();break; case 2:search();break; case 3:del();break; case 4:sort();break; case 5:exit(0);break; void main() menu(); 3.2 公共函数:所用到的六个公共函数一个函数结束时的选择浏览还是返回的函数显示数据结构项目的函数保存文件B函数加载文件B函数保存文件A函数加载文件A函数int load_info() /*A文件加载函数*/ int i; FILE *fp; if(fp=fopen(A.txt,r)=NULL) printf(nCannot open filen);
8、return 0; for(i=0;!feof(fp);i+) fscanf(fp,%s%s%s%s%s,stui.num,stui.name,stui.sex,stui.room,stui.tel); fclose(fp); return(i);int save_info(int n) /*A文件保存函数*/ int i; FILE *fp; if(fp=fopen(A.txt,w)=NULL) printf(nCannot open filen); return 0; for(i=0;in;i+) if(strcmp(stui.num,-1)!=0) fprintf(fp,%s %s %s
9、 %s %sn,stui.num,stui.name,stui.sex,stui.room,stui.tel); fclose(fp);int load_score() /*B文件加载函数*/ float ca_mark(int i);void ca_score(int i); int i,j; FILE *fp; if(fp=fopen(B.txt,r)=NULL) printf(nCannot open filen); return 0; for(i=0;!feof(fp);i+) fscanf(fp,%s%s%s%d,scri.num,scri.subnum,scri.subject,&
10、scri.oscore); for(j=0;j3;j+) fscanf(fp,%d,&scri.markj); ca_mark(i); ca_score(i); fclose(fp); return(i);int save_score(int m) /*B文件保存函数*/ int i,j; FILE *fp; if(fp=fopen(B.txt,w)=NULL) printf(nCannot open filen); return 0; for(i=0;im;i+) if(strcmp(scri.num,-1)!=0) fprintf(fp,%s %s %s %d %d %d %d %d %d
11、n,scri.num,scri.subnum,scri.subject,scri.oscore,scri.mark0,scri.mark1,scri.mark2,(int)scri.totalmark,(int)scri.gscore); fclose(fp);void printone(int i) /*显示数据结构项目的函数(公共函数)*/ printf(nt%-4st%-6st%-4st%-8st%-8s,stui.num,stui.name,stui.sex,stui.room,stui.tel);void printface() /*公共函数,一个函数结束时的选择浏览还是返回的函数*
12、/ printf(nt学号t姓名 t性别t宿舍号码t电话号码n);3.3 功能模块的设计: /* 信 息 删 除 模 块*开始数据删除结束输入学号void del() /删除模块 void menu(); int i,j,c,flag=0;char s6; printface(); for(i=0;in;i+) printone(i); puts(nn); printf(nInput the delete number: ); scanf(%s,s);printf(nnSure?t1).Suret2).Not3).Backt bb); scanf(%d,&c); if(c=1) for(i=0
13、;in;i+) if(judge(s,stui.num) flag=1; strcpy(stui.num,-1); for(j=0;jm;j+) if(judge(s,scri.num) strcpy(scri.num,-1); break; if(flag=0) puts(ntNot exist!n);choice_menu(5); if(c=2) puts(nn);del(); if(c=3) puts(nn);menu(); save_info(n); save_score(m); load_info(); load_score(); puts(nntSuccessfully!._.n)
14、; choice_menu(5);/* 开始数据排序X=1?实际学分排序综合成绩排序结束YN 信 息 排 序 模 块*void sort() /排序模块 void menu(); int c,k,v;printf(nnChoice number: 1).综合成绩t2).实得学分t bb); scanf(%d,&c); list_subject(); scanf(%d,&k); printf(nnChoice: 1).从高到低t2).从低到高t bb); scanf(%d,&v); sortmark(c,k,v);void sortmark(int c,int k,int v)char *num
15、_name(char s); int judge(char a,char b);char s4; int i,j=0,i1,j1,k1;struct score *p100,*t; switch(k) case 1:strcpy(s,A01);break; case 2:strcpy(s,B03);break; case 3:strcpy(s,C01);break; case 4:strcpy(s,D02);break; for(i=0;im;i+) pi=NULL; for(i=0;im;i+) if(judge(s,scri.subnum) pj=&scri;j+; for(i1=0;i1
16、j-1;i1+) k1=i1; if(c=1) for(j1=i1+1;j1totalmarktotalmark) k1=j1; if(c=2) for(j1=i1+1;j1gscoregscore) k1=j1; if(i1!=k1)t=pi1;pi1=pk1;pk1=t; puts(n名次 姓名t平时成绩 实验成绩 卷面成绩 综合成绩 实得学分); if(v=1) for(i=0;inum),pi-mark0,pi-mark1,pi-mark2,pi-totalmark,pi-gscore); if(v=2) for(i=j-1;i=0;i+) printf(%-4d %-8s &%-8d
17、 %-8d %-8d %-8.2f %-4.2f,i+1,num_name(pi-num),pi-mark0,pi-mark1,pi-mark2,pi-totalmark,pi-gscore);4. 调试分析4.1主函数:4.2排序模块4.3删除模块4.4退出5.总结先就在本程序的编写过程中出现的问题进行说明:首先,对于数据的删除存在一定的问题,这个问题是在老师的指导下又经过同学们的帮助才解决的,其间,我明白了结构体数组中数据删除的基本原理和删除的方法;其次,在程序编写过程中,我忽视了几个需要注意的基本语法,比如,有的变量忘记了定义和标识符的使用等问题,这个是在同学的帮助下才检查出来改正的。这
18、属于C语言运用的基础问题,也是因为平时的上机编程实习太少所致,以后还有待于改进;第三,对于数组中数据的存储原理存在一定的疑问,这个是请同学讲解后才加深的理解;第四,就是在程序开始编写时,整体思路框架的构思感觉无从下手,这是一个长期的问题,需要多多接触程序,理解更多的程序编写思路才能做到在白那些之前胸有成竹。这次是请教同学帮忙才得以解决的。这是我第一次相对比较独立的编程,从中感受到了小小的进步所带来的喜悦,更重要的是,通过这次C语言课程设计我意识到了自己在学习上的许多不足,许多感觉会的知识在应用时还是有许多不确定,学习C语言,动手能力是很重要的,只要通过实践才能真正发现自己的不足,使自己的能力真
19、正有所提高。俗话说:“万事开头难。”现在既然开头已经过去了,也大致了解了C语言的学习规律,课本虽然学完了,但自己需要加强与完善的还有很多。首先,从这个程序说起。这个程序的编写过程中没有用到很特殊的算法,基本都是老师上课强调的一些基本算法,让人做起来感觉还是挺简单易懂的,这里也体会到了C语言的灵活性。其次,我认为我这个程序的亮点在于它的整体结构清晰明朗,首先是两个结构体,然后就是声明函数,再往下是主函数选择执行命令,最后是几个用到的被调用函数。再次,我体会到了计算机语言的严谨性,C语言课本上的许多微小知识看似微乎其微,实则作用巨大,在程序设计过程中,一处小小的知识死角就可能会使整个程序无法运行,
20、所以计算机语言的学习容不得半点儿马虎,留不得半处死角,不能忽视任何一处知识。此次课程设计,我在编写程序,修改程序进一步完成作业的同时,也深深感受到了计算机高级语言的清晰的层次性和运用的技巧性,我想这一点无论对于我们这些初涉计算机语言的学生而言,还是对于已在计算机专业任教多年的资深教师来说,都是必须认识到的。认识到这一点,计算机初学者可以在巩固基础的同时培养探索更加简洁的思路的意识,资深教师则可以在计算机语言教授过程中起到提纲挈领,诱思探究新的教学方法,使学生在学习计算机语言的时候抓住重点,理解难点,掌握要点。姓名:黄樊学号:2012-9-6答辩记录教师意见附录一:源程序代码#include #
21、include #include #include #include int n,m;struct studentchar num6;char name20;char sex3;char room5;char tel10;stu10;struct scorechar num6; char subnum4; char subject10; int oscore; int mark3; float totalmark; float gscore;scr60;float ca_mark(int i) if(scri.mark1=-1) scri.totalmark=0.3*scri.mark0+0.
22、7*scri.mark2; else scri.totalmark=0.15*(scri.mark0+scri.mark1)+0.7*scri.mark2; return (scri.totalmark);void ca_score(int i) int c; c=(int)ca_mark(i)/10; if(c6) c=5; switch(c) case 10: case 9:scri.gscore=scri.oscore;break; case 8:scri.gscore=0.8*scri.oscore;break; case 7:scri.gscore=0.75*scri.oscore;
23、break; case 6:scri.gscore=0.6*scri.oscore;break; case 5:scri.gscore=0;break; int load_info() /加载函数 int i; FILE *fp; if(fp=fopen(A.txt,r)=NULL) printf(nCannot open filen); return 0; for(i=0;!feof(fp);i+) fscanf(fp,%s%s%s%s%s,stui.num,stui.name,stui.sex,stui.room,stui.tel); fclose(fp); return(i);int s
24、ave_info(int n) /保存函数 int i; FILE *fp; if(fp=fopen(A.txt,w)=NULL) printf(nCannot open filen); return 0; for(i=0;in;i+) if(strcmp(stui.num,-1)!=0) fprintf(fp,%s %s %s %s %sn,stui.num,stui.name,stui.sex,stui.room,stui.tel); fclose(fp);int load_score() /加载函数 float ca_mark(int i);void ca_score(int i); i
25、nt i,j; FILE *fp; if(fp=fopen(B.txt,r)=NULL) printf(nCannot open filen); return 0; for(i=0;!feof(fp);i+) fscanf(fp,%s%s%s%d,scri.num,scri.subnum,scri.subject,&scri.oscore); for(j=0;j3;j+) fscanf(fp,%d,&scri.markj); ca_mark(i); ca_score(i); fclose(fp); return(i);int save_score(int m) /保存函数 int i,j; F
26、ILE *fp; if(fp=fopen(B.txt,w)=NULL) printf(nCannot open filen); return 0; for(i=0;im;i+) if(strcmp(scri.num,-1)!=0) fprintf(fp,%s %s %s %d %d %d %d %d %dn,scri.num,scri.subnum,scri.subject,scri.oscore,scri.mark0,scri.mark1,scri.mark2,(int)scri.totalmark,(int)scri.gscore); fclose(fp);void printone(in
27、t i) printf(nt%-4st%-6st%-4st%-8st%-8s,stui.num,stui.name,stui.sex,stui.room,stui.tel);void printface() printf(nt学号t姓名 t性别t宿舍号码t电话号码n);void list_subject() puts(nnChoice subject:n); printf(t1).大学物理t2).高等数学t3).VFt4).大学英语n); printf(nChoice number(1-4): bb);void sortmark(int c,int k,int v)char *num_name
28、(char s); int judge(char a,char b);char s4; int i,j=0,i1,j1,k1;struct score *p100,*t; switch(k) case 1:strcpy(s,A01);break; case 2:strcpy(s,B03);break; case 3:strcpy(s,C01);break; case 4:strcpy(s,D02);break; for(i=0;im;i+) pi=NULL; for(i=0;im;i+) if(judge(s,scri.subnum) pi=&scri;j+; for(i1=0;i1j-1;i
29、1+) k1=i1; if(c=1) for(j1=i1+1;j1totalmarktotalmark) k1=j1; if(c=2) for(j1=i1+1;j1gscoregscore) k1=j1; if(i1!=k1)t=pi1;pi1=pk1;pk1=t; puts(n名次 姓名t平时成绩 实验成绩 卷面成绩 综合成绩 实得学分); if(v=1) for(i=0;inum),pi-mark0,pi-mark1,pi-mark2,pi-totalmark,pi-gscore); if(v=2) for(i=j-1;i=0;i+) printf(%-4d %-8s &%-8d %-8d
30、 %-8d %-8.2f %-4.2f,i+1,num_name(pi-num),pi-mark0,pi-mark1,pi-mark2,pi-totalmark,pi-gscore);int judge(char a,char b) if(strcmp(a,b)=0) return 1; else return 0;char *num_name(char s) char *p; int i; for(i=0;in;i+) if(judge(s,stui.num) p=stui.num+6; return(p); break; void searchone(int k) void choice_
31、menu(int k); char s20;int i,flag=0; if(k=1) printf(nInput the number: ); if(k=2) printf(nInput the name: ); scanf(%s,s); for(i=0;in;i+) if(k=1) if(judge(s,stui.num) printface(); printone(i); flag=1; puts(nntSuccessfully!n); choice_menu(k); if(k=2) if(judge(s,stui.name) printface(); printone(i); flag
32、=1; puts(nntSuccessfully!n); choice_menu(k); if(flag=0&k=1) puts(nntNot exist!n); if(flag=0&k=2) puts(nntNot exist!n); choice_menu(k);void searchroom() /按寝室查询 void choice_menu(int k); int i,flag=0; char s3; printf(nInput the room number: ); scanf(%s,s); printface(); for(i=0;in;i+) if(judge(s,stui.ro
33、om) printone(i);flag=1; puts(n); if(flag=0) puts(nntNot exist!n); choice_menu(3);void search_onescore() /成绩查询 void choice_menu(int k); int i,j=0,flag=0; char s6;float sum; printf(nInput the number: ); scanf(%s,s); for(i=0,sum=0;im;i+) if(judge(s,scri.num) if(j=0) printf(nn学号:%-6st姓名:%s,s,num_name(s); printf(n课程编号:%-6st课程名称:%-10st综合成绩:%-6.2ft实得学分:%-4.2f,scri.subnum,scri.subject,scri.totalmark,scri.gscore); sum+=scri.gscore;flag=1;j+; if(flag=1) printf(