《学籍管理系统C语言课程设计.doc》由会员分享,可在线阅读,更多相关《学籍管理系统C语言课程设计.doc(27页珍藏版)》请在三一办公上搜索。
1、 德州学院计算机系课程设计报告实习名称 C语言课程设计 设计题目 学籍管理系统 实习时间 2012-03-05至2012-03-11 专业班级 2011计算机科学与技术 指导老师 王付山 教学单位(盖章) 小组分工情况:学号姓名分工设计、编码测试、编写文档二零一二年 五 月 二十五 日目录1 实习目的12 问题描述13 需求分析14 概要设计25 详细设计35.1 数据结构分析35.2 算法分析35.3 主函数的设计85.4 预处理、常量定义、函数原型及主函数的设计126 测试分析146.1 操作员管理功能146.2测试截图147使用说明168总结179参考文献,1710附录18源程序181
2、实习目的通过实习,了解并初步掌握设计,实现较大系统的完整过程,包括系统分析,编码设计,系统集成,以及调试分析,熟练掌握数据结构的选择,设计,实现以及操作方法,为进一步的应用开发打好基础。2 问题描述设计一个程序完成一个简单的学籍管理系统,学生的基本信息有:学号,姓名,年龄,C语言成绩。假设班级有2名学生,能实现以下功能:(1)输入2名学生的基本信息。(2)输出2名学生的基本信息。(3)输入学号/姓名,输出该学生的基本信息。(4)按学号/年龄对学生进行排序(升序),按C语言成绩降序排序。(5)统计优、良、不及格的学生3 需求分析设计一个学生管理系统,通过此系统可以实现如下功能:(1)可以录入学生
3、的基本信息(数据可以存储在一个数据文件中,数据结构、具体数据自定);(2)可以查询任意学生的基本信息(如,输入学号,查询姓名,性别,年龄,C语言成绩);(3)可以输入姓名,查询学号,性别,年龄,C语言成绩,);设计一个程序完成一个简单的学籍管理系统,学生的基本信息有:学号、姓名、年龄、C语言成绩。假设班级有2名学生,能实现以下功能:4 概要设计如图所示,该图为设计时功能的示意图,使用者能够根据提示输入相应的号码实现下面的功能,如按1实现输入学生的基本信息等。图一为学籍管理系统的功能示意图,如下: 图1 学籍管理系统的功能示意图该图为查找学生的基本信息时的功能示意图,如下图(图2): 图2 学生
4、的基本信息时的功能示意图5 详细设计5.1 数据结构分析此案例是一维数组、二维数组的综合运用。2名学生的学号、年龄、C语言成绩可分别用长度为10的一维数组sno(long型)、sage(int型)、cs(float型)存储;2名学生的姓名可用元素长度为20个字符的一维数组,即字符型二维数组sname存储。5.2 算法分析使用模块化设计思想,进入系统主界面时有6个主要模块,输入学生的基本信息、输出学生的信息、查找学生的基本信息、学生成绩排序、统计学生成绩分布、退出。学籍管理系统的流程图如图3所示: 开始输输出学生的信息模块入输入学生的基本信息模块学学生成绩排序模块统统计学生成绩分布模块 主函数
5、载入模块查查找学生的基本信息模块按学号按姓名返回 退出系统结束 图3 学籍管理系统流程图(1)输入学生的基本信息、输出学生的基本信息 输入学生的基本信息、输出学生的基本信息模块使用一重循环即可实现。对应的函数为input,output。具体实现程序流程图如下(图4): 开 始 载 入 模 块 输入学生基本信息想学号成成绩年年龄姓姓名 保 存输出学生基本信息 结 束图4 输入/输出学生基本信息流程图(2) 查找学生的基本信息又分为按学号查找和按姓名查找,所以查找学生的基本信息模块结构如图5所示。按学号查找、按姓名查找实现函数功能,程序流程图如下:开 始查找学生基本信息你你输入的姓名不存在你你输入
6、的学号不存在按按姓名学按学号输出学生基本信息结 束图5 查找学生的基本信息流程图(3)排序模块:完成对2名学生C语言成绩按降序排序。(4)统计模块:完成各个分数段学生的统计,并将其基本信息输出。如图6所示:开 始统计各个成绩阶段的学生分布优优的学生不良的学生不中的学生不不及格输出各个成绩阶段的学生分布结 束图6 各个分数段学生的统计流程图(5)退出模块:完成退出系统的功能,使用语句exit(1),即可实现。5.3 主函数的设计主函数的功能是:(1)变量及数组定义。(2)显示界面。(3)选择操作。其中,显示界面由函数maininterface实现,对应代码如下: void maininterfa
7、ce() printf(tt*n); printf(tt* 欢迎使用学籍管理 系统 *n); printf(tt*1.输入学生的基本信息 2.输出学生的信息 *n ); printf(tt*3.查找学生的基本信息 4统计学生的成绩排序 *n ); printf(tt*5.统计学生的成绩分布 0.退出 *n ); printf(tt*n); printf(tt请输入0-5: ); 选择操作由函数choice完成,对应代码如下。void choice(long sno, char sname20, int sage, float cs, int N) int m; while (1) scanf(
8、%d, &m); switch (m) case 1: input(sno, sname, sage, cs, N); maininterface(); break; case 2: output(sno, sname, sage, cs, N); maininterface(); break; case 3: findinterface(); findchoice(sno, sname, sage, cs, N); break; case 4: cssort(sno, sname, sage, cs, N); break; case 5: total(sno, sname, sage, cs
9、, N); maininterface(); break; case 0: exit(1); 另外,进入查找学生的基本信息模块后,类似主函数有对应的显示界面、选择操作,分别由函数findinterface、findchoice完成,它们的实现代码如下:void findinterface() printf(tt*n); printf(tt* 欢迎使用查找操作 *n); printf(tt*1.按学号查找 *n ); printf(tt*2.按姓名查找 *n ); printf(tt*0.返回上一级 *n ); printf(tt*n); printf(tt请输入0-2: ); void fin
10、dchoice(long sno, char sname20, int sage, float cs, int N) int m; while (1) scanf(%d, &m); switch (m) case 1: snofind(sno, sname, sage, cs, N); findinterface(); break; case 2: snamefind(sno, sname, sage, cs, N); findinterface(); break; case 0: break; if (m = 0) break; maininterface();5.4 预处理、常量定义、函数
11、原型及主函数的设计为了便于测试学生数,定义为3。预处理命令、函数声明语句及主函数描述如下。#include #include #include #define M 3void maininterface();void findinterface();void choice(long sno, char sname20, int sage, float cs, int N);void findchoice(long sno, char sname20, int sage, float cs, int N);void input(long sno, char sname20, int sage,
12、float cs, int N);void output(long sno, char sname20, int sage, float cs, int N);void snofind(long sno, char sname20, int sage, float cs, int N);void snamefind(long sno, char sname20, int sage, float cs, int N);void cssort(long sno, char sname20, int sage, float cs, int N);void total(long sno, char s
13、name20, int sage, float cs, int N);int main(int argc, char *argv) /变量及数组定义 long snoM; char snameM20; int sageM; float csM; int i, j; /显示界面 maininterface(); /选择操作 choice(sno, sname, sage, cs, M);6 测试分析6.1 操作员管理功能(1)当我们从键盘输入有关信息后,DOS中显示的信息与从键盘输入的信息相同,表明交通系统可以从键盘正确输入信息。(2).在系统程序中,选择输入信息后,用显示操作验证,表明内容可以
14、正确调入结构体中,说明系统可以读取信息。(3).及时存储,程序中只要对链表的内容进行了改动,就立即写入文件,从而加大了程序的安全性,减小了对各种不安全因素可能引起的损失。6.2 测试截图 (1)学籍管理系统开始的登录功能界面,如下图所示(图7):图7 学籍管理系统开始的登录界面(2)输入学生基本信息的功能界面,实现啦两名同学的信息输入。如下图所示(图8): 图8 输入学生基本信息的界面(3)输出学生的基本信息的功能界面,实现啦对学生的信息的查询,如下图所示(图9): 图9 输出学生的基本信息的界面(4)通过学号或姓名来查询学生的基本信息的功能界面,如下图所示(图10):图10 查询学生的基本信
15、息的界面(5)统计C语言成绩各个层次的具体分布的功能界面,如图11所示:图11 统计C语言成绩各个层次的具体分布界面图7 使用说明在学生学籍管理系统的开发过程中,模块是需要系统实现如下功能:学生信息的输入,输出,通过姓名或学号查询性别,C语言成绩,年龄,实现C语言各个阶段的学生。(1)运行程序,首先出现主界面。主界面包括五个选项:选项一,输入学生的基本信息;选项二,输出学生的基本信息;选项三,查找学生的基本信息;选项四,统计学生的学生成绩分布;选项五,学生成绩排序。(2)按 1键,回车进入输入学生基本信息界面。该界面用于输入个人资料:姓名、学号、性别、年龄及C语言成绩。输入完成后点回车完成输入
16、。(3)按2键回车进入输出学生基本信息界面,输出学生基本信息。按回车返回。(4)按3键回车查询学生的基本信息。可根据提示按1键用学号查询,按2键用姓名查询,按0返回上一级。(5)按4键查询各个阶段c语言成绩的人数,分为优,良,中,及格,不及格五个级别。(6)按5键回车学生成绩排序。(7)按0退出学生学籍管理系统8 总结(1)本次C 语言的实习课让我对C 语言的学习又有了更深入的了解,也让我更深刻地领悟到了“实践出真理”这个道理,在上机实践过程中学到的知识远远超过了在课堂上十几周学到的,学校组织的这次实习让我们这些实践知识匮乏的大学生增添了许多社会经验,为我们将来走上工作岗位其了不小的铺垫作用。
17、(2)本次实习中遇到了很多以前没有遇到过的问题,也曾想要放弃,但看到那些同学都在那认真的写程序,给了我继续的信心。在同学的帮助下,我顺利的结束了本次实习,让我知道原来凭借自己努力取得的成功会让自己这么欣慰,也让我知道了友谊和团结的重要性。(3)注重理论知识和动手能力的相辅相成。平时要多动脑和多动手,多上机操作实践。(4)平时多浏览资料。我们所学的专业知识更新很快,这就要求我们能与时俱进,图书馆里有大量的参考书,另外网上有着更多更新的知识宝库。如果能很好的利用这两点,对自己的进步会有很大的帮助。(5)虚心请教,当遇到不懂的问题自己想了很多办法却无法解决时,可以请教一些其他的同学或老师,这可以很快
18、的解决问题。(6) 在这次课设中,提高和完善所学知识,收获丰富,受益良多;从中学到的知识和吸取的经验教训将会使我的知识很好的加深。9 参考文献1王付山,谢延红.C语言程序设计教程M.北京:国防工业出版社,2010.8.2李秀坤.数据结构与算法实验教程M.北京:高等教育出版社,2009.6.1.3徐凤生.数据结构与算法C语言版M.北京:机械工业出版社,2010.10.1.4严蔚敏,吴伟民.数据结构C语言版M.北京:清华大学出版社,2009.3.1.5田淑清.C语言程序设计M.北京:高等教育出版社,2010.9.10 附录源程序:#include #include #include #define
19、 M 2void maininterface();void findinterface();void choice(long sno, char sname20, int sage, float cs, int N);void findchoice(long sno, char sname20, int sage, float cs, int N);void input(long sno, char sname20, int sage, float cs, int N);void output(long sno, char sname20, int sage, float cs, int N)
20、;void snofind(long sno, char sname20, int sage, float cs, int N);void snamefind(long sno, char sname20, int sage, float cs, int N);void cssort(long sno, char sname20, int sage, float cs, int N);void total(long sno, char sname20, int sage, float cs, int N);int main(int argc, char *argv)/变量及数组定义long s
21、noM;char snameM20;int sageM;float csM;int i, j;/显示界面maininterface();/选择操作choice(sno, sname, sage, cs, M);system(pause);return 0;void maininterface()printf(tt*n);printf(tt* 欢迎使用学籍管理系统 *n);printf(tt*1.输入学生的基本信息 2.输出学生的信息 *n );printf(tt*3.查找学生的基本信息 4.学生成绩排序 *n );printf(tt*5.统计学生的成绩分布 0.退出 *n );printf(t
22、t*n);printf(tt请输入0-5: ); void findinterface()printf(tt*n);printf(tt* 欢迎使用查找操作 *n);printf(tt*1.按学号查找 *n );printf(tt*2.按姓名查找 *n );printf(tt*0.返回上一级 *n );printf(tt*n);printf(tt请输入02:); void input(long sno, char sname20, int sage, float cs, int N)int i;/输入N个学生的基本信息printf(输入%d个学生的信息.n, N);for (i = 0; i N
23、; i+) printf(n输入第%d个学生的n, i + 1);printf(学号:);scanf(%ld, &snoi);getchar();printf(姓名:);gets(snamei);printf(年龄:);scanf(%d, &sagei);printf(C语言成绩:);scanf(%f, &csi);void output(long sno, char sname20, int sage, float cs, int N)int i;/输出N个学生的基本信息printf(n%d个学生的基本信息为n, N);for (i = 0; i N; i+) printf(%-10ld,
24、snoi);printf(%-16s, snamei);printf(%-4d, sagei);printf(%-6.0f, csi);printf(n);void snofind(long sno, char sname20, int sage, float cs, int N)int i;long sno1;/按学号查找printf(请输入您要查找的学号:) ;scanf(%ld, &sno1);for (i = 0; i N; i+)if (snoi = sno1) break;if (i N)printf(学号为%ld的学生的基本信息为:n, sno1);printf(%-10ld,
25、snoi);printf(%-16s, snamei);printf(%-4d, sagei);printf(%-6.0f, csi);printf(n);elseprintf(你输入的学号不存在!n);void snamefind(long sno, char sname20, int sage, float cs, int N)int i;char sname120;/按姓名查找printf(请输入您要查找的姓名:) ;getchar();gets(sname1);for (i = 0; i N; i+)if (strcmp(snamei, sname1) = 0) break;if (i
26、 N)printf(姓名为%s的学生的基本信息为:n, sname1);printf(%-10ld, snoi);/printf(%-16s, snamei);printf(%-4d, sagei);printf(%-6.0f, csi);printf(n);elseprintf(你输入的姓名不存在!n);void cssort(long sno, char sname20, int sage, float cs, int N )/按成绩降序排序int i, j, k;long tsno;char tsname20;int tsage;float tcs;for (i = 0; i N - 1
27、; i+)k = i;for (j = i + 1; j csk)k = j;if (k != i) /交换下标i与k对应学生的信息 tsno = snoi;snoi = snok;snok = tsno;/交换学号strcpy(tsname, snamei) ;strcpy(snamei, snamek);strcpy(snamek, tsname);tsage = sagei;sagei = sagek;sagek = tsage;tcs = csi;csi = csk;csk = tcs;void total(long sno, char sname20, int sage, float
28、 cs, int N)/统计int i;/按优,良 ,不及格的顺序打印printf(n优(C语言成绩=90)的学生为:n) ;for (i = 0; i = 90)printf(%-10ld, snoi);printf(%-16s, snamei);/printf(%-4d, sagei);printf(%-6.0f, csi);printf(n);printf(n良(80=C语言成绩90)的学生为:n) ;for (i = 0; i = 80 & csi 90)printf(%-10ld, snoi);printf(%-16s, snamei);/printf(%-4d, sagei);pr
29、intf(%-6.0f, csi);printf(n);printf(n中(70=C语言成绩80)的学生为:n) ;for (i = 0; i = 70 & csi 80)printf(%-10ld, snoi);printf(%-16s, snamei);/printf(%-4d, sagei);printf(%-6.0f, csi);printf(n);printf(n及格(60=C语言成绩70)的学生为:n) ;for (i = 0; i = 60 & csi 70)printf(%-10ld, snoi);printf(%-16s, snamei);/printf(%-4d, sage
30、i);printf(%-6.0f, csi);printf(n);printf(n不及格(C语言成绩60)的学生为:n) ;for (i = 0; i N; i+) if (csi 60)printf(%-10ld, snoi);printf(%-16s, snamei);/printf(%-4d, sagei);printf(%-6.0f, csi);printf(n); void choice(long sno, char sname20, int sage, float cs, int N)int m;while (1)scanf(%d, &m);switch (m)case 1: in
31、put(sno, sname, sage, cs, N); maininterface(); break;case 2: output(sno, sname, sage, cs, N); maininterface(); break;case 3: findinterface();findchoice(sno, sname, sage, cs, N);break;case 4: cssort(sno, sname, sage, cs, N); break;case 5: total(sno, sname, sage, cs, N);maininterface(); break;case 0: exit(1);void findchoice(long sno, char sname20, int sage, float cs, int N)int m;while (1)scanf(%d, &m);switch (m)case 1: snofind(sno, sname, sage, cs, N); findinterface(); break;case 2: snamefind(sno, sname, sage, cs, N); findinterface(); break;case 0: break;if (m = 0) break;maininterface();