《嵌入式课程设计 学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《嵌入式课程设计 学生信息管理系统.docx(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、嵌入式课程设计 学生信息管理系统 嵌入式课程设计报告册 题目:学生信息管理系统 班级:移动三班 辅导老师:邱雅 一、软件需求分析 1、可行性分析 (1)经济可行性 :目前中国有越来越多的中小型企业在蓬勃发展,而现代化员工信息管理系统已经渐渐取代了传统的人工信息管理,智能化的管理系统更具有高效性可行性,所以自能管理系统将会成为或正在成为现代化公司员工信息管理的有效方式; :这款学生信息管理系统的价格适合全部学校消费群体,将会有很大的应用空间,满意各种学校学生管理的要求; :学生系信息管理系统的价格比相对于同类公司员工管理系统产品较低,同时本软件的成本低于同类产品的平均水平,具有很大的利润空间;
2、:本系统的开发环境和软件环境都是当前流行的产品,本系统的软件需求都是基本的功能和应用,在现实中很简单实现。 (2)法律可行性 本软件的开发采纳C语言作为软件的开发语言,没有采纳同类产的代码,完全是自主开发,并根据国际上软件开发的相关规定来实现开发的; (3)技术可行性 本软件开发系统采纳linux开发平台,具有很强的兼容性和扩展性,本软件的占用的内存较小大部分的硬件处理系统都可以兼容,开发语言采纳国际通用的C高级编程语言具有很高的维护可行性,经过综合分析我认为现阶段我方所拥有的资源和技术人员,在技术上完全可以实现这款软件的开发,并且能高质量,快速的完成这项工作。 2、用户需求概述 用户须要一个
3、可以简洁的实现通讯录功能的简洁通讯录系统,分别完成查询,增加,修改,删除的一些简洁的功能要求在完成所要求功能的前提下增加与用户的互动,使软件的可操作性增加,此外还可以自愿加入一些新的功能来进行对软件的优化在优化的同时要留意软件基本功能的保障。 二、软件分析与设计 一功能 1、创建班级 2、输出学生信息 3、根据学号录入学生成果 4、根据班级录入学生成果 5、根据学号修改学生成果 6、根据班级修改学生成果 7、根据班级统计学生的总成果 8、根据学号查询学生成果 9、根据班级输出不及格学生名单及科目 10、根据班级输出学生成果单 0、退出系统 二功能模块图: 学生信息管理系统根据创建班级输出学生信
4、息根据学号录入学生成果根据班级录入学生成果根据学号修改学生成果根据班级修改学生成果根据班级统计学生的总成果根据学号查询学生成果班级输出不及格学生名单及科目根据班级输出学生成果单根据班级输出学生成果单 图1 系统功能模块图 三、主要功能的实现 程序设计一般由两部分组成 些数据结构具有同样的重要性 保存等外更多的状况是查询 1、学生信息管理 算法和数据结构,合理地选择和实现一个数据结构和处理这 ,在学生信息管理程序中由于预料记录数比较大能够、删除、 。所以选用动态链表保存数据。 由于信息输入量比较大,须要的存储空间大,所以须要采纳树的双亲表示法进行信息存储,为了便利采纳以下定义。 struct s
5、tudent int num; char name20; char sex5; char cla30; int semester; char course30; int score3; struct student *next; ; struct list int cla; struct student *head; ; 2.main()主函数 程序采纳模块化设计,主函数是程序的入口各模块独立。可分块调 试均由主函数限制调用限制功能的实现通过循环执行一个开关语句,该语句的条件值是通过 调用主菜单函数得到的返回值,依据该值 调用相应的各功能函数。同时设置一个断点。 即当返回值为肯定条件时运行br
6、eak 0;函数结束程序,以免造成死循环。依据菜单的提示进 行须要的操作。 图2 主函数输出界面 起先输入数据否选择是功能选择退出系统结束 图3 程序总体流程图 (1)主菜单 干脆利用输出函数 printf 输出字符串在屏幕上显示一个菜单并显示一个提示输入 选项输 入数字,将此数字作为菜单函数的返回值返回主函数,主函数依据 这个数字调用相应的功 10-2 所示: 能函数, 制作简便, 操作简洁界面如图 图 4 主菜单界面 由于程序中许多地方用到了字符串输入语句会造成下一个字符不能正确读入为了 在程序调 根据所见即所得的方式干脆 用执行了各个函数后能够清楚地看到菜单 并输入新的选项。 设计输出函
7、数输出字符串达到菜单效果将精力主要放在程序功能的实现上利用 while循环 语句始终执行 scanf(%d ,t)语句。让用户输入 数根据整形数据形式输入然后字符串转化 为数字返回主函数 。既然是数字选项为什么不用整数格式输入而要按字符串输入。再将其 a 和 b 等 由于类转换呢,假如根据整数格式输入,当用户输入了非数字字 符。例如 表面上看是数字也应将其设为字符 型不同将导致程序出错。所以对于不参加运算的数据 处理。例如电话号码,千万不要设为整数类型,程序设计技巧许多。所以读者在编程调试中应留意并细致体会。 (2)创建班级 输入记录时根据一条一行的格式输入,每个数据之间用空格分隔,较为清楚且
8、能干脆 反映数据之间的关系,但由于 scanf 函数的特性,在输入时数据用回车分隔也是可以的,但与 界面设计不吻合界面.由于记录并不是一次性全部输入而是随时填加和删除的,而预先开拓 n, 然后用的空间数往往大于实际的记录数。所以程序设计为首先输入打算输入的记录数 while循环语句循环输信息。 图5 创建列表页面 输出学生信息 该功能的实现主要是 是通过结构体数组中的链表指针进行输出 图6输出全部信息 根据学号录入学生成果 通过头指针查找到须要录入成果的节点,录入成果。 根据班级录入学生成果 根据学 号 修 改 学 生 成 绩 根据班级修改学生成果 根据班 级 统 计 学 生 的 总 成 绩
9、根据学 号 查 询 学 生 成 绩 根据班级输 出 不 及 格 学 生 名 单 及 科 目(11)根据班级输出学生成果单 四、程序设计 (一)先进行人工检查,即静态检查。 在写好一个程序以后,不要匆忙忙忙上机,而应对程序进行人工检查。这一步非常重要,它能发觉程序设计人员由于疏忽而造成的多数错误。这一步往往简单被人忽视,总希望把一切都推给计算机去做,但这样会多占用机器时间,作为一个程序人员应当养成严谨的作风,每一步都要严格把关,不把问题留给后面的工序。 为了更有效地进行人工检查,所编的程序应力求做到以下几点: 应当采纳结构化程序方法编程,以增加可读性; 尽可能多加注释,以帮助理解每段程序的作用;
10、 在编写困难的程序时不要将全部语句都写在main函数中,而要多利用函数,用一个函数来实现一个单独的功能。各函数之间除用参数传递数据外,尽量少出现耦合关系,这样便于分别检查和处理。 (二)在人工检查无误后,再上机调试。 通过上机发觉错误称为动态检查。在编译时会给出语法错误的信息,调试时可以依据提示信息详细找出程序中出错之处并改正。应当留意的是有时提示出错的地方并不是真正出错的位置,假如在提示出错的行找不到错误的话应当到上一行再找。有时提示出错的类型并非肯定精确,由于出错的状况繁多且各种错误互有关联,因此要擅长分析,找出真正的错误,而不要只从字面意义上找出错信息,钻牛角尖。 假如系统提示的出错信息
11、许多,应当从上到下逐一改正。有时显示出一大片出错信息往往使人感到问题严峻,无从下手。其实可能只有一二个错误。例如,对运用的变量未定义,编译时就会对全部含该变量的语句发出出错信息。这时只要加上一个变量定义,就全部错误都消退了。 (三)在改正语法错误(包括“错误(error)”和“警告(warning)”)后,程序经过连接(link)就得到可执行的目标程序。运行程序,输入程序所需数据,就可得到运行结果。应当对运行结果作分析,看它是否符合要求。有的初学者看到运行结果就认为没问题了,不作仔细分析,这是危急的。 有时,数据比较困难,难以马上推断结果是否正确。可以事先考虑好一批“试验数据”,输入这些数据可
12、以很简单推断结果正确与否。例如解方程。事实上,当程序困难时很难把全部的可能状况全部都试到,选择典型的临界数据作试验即可。 (四)运行结果不对,大多属于逻辑错误。对这类错误往往须要细致检查和分析才能发觉。可以采纳以下方法: 1.将程序与流程图细致比照,假如流程图是正确的,程序写错了,是很简单发觉的。例如,复合语句遗忘写花括弧,只要一比照流程图就能很快发觉。 2.假如实在找不到错误,可以采纳“分段检查”的方法。在程序不同的位置设几个printf函数语句,输出有关变量的值,逐段往下检查。直到找到在某一段中数据不对为止。这时就已经把错误局限在这一段中了。不断减小“查错区”,就能发觉错误所在。 3.也可
13、以用“条件编译”吩咐进行程序调试(在程序调试阶段,若干printf函数语句就要进行编译并执行。当调试完毕,这些语句不用再编译了,也不再被执行了)。这种方法可以不必一一去掉printf函数语句,以提高效率。 4.假如在程序中没有发觉问题,就要检查流程图有无错误,即算法有无问题。如有则改正之,接着修改程序。 5.有的系统还供应debug(调试)工具,跟踪程序并给出相应信息,运用更为便利,请查阅有关手册。 总之,程序调试是一项细致深化的工作,须要下功夫,动脑子,擅长积累阅历。在程序调试过程中往往反映出一个人的水平,阅历和看法。希望大家给以足够的重视。上机调试程序的目的决不是为了“验证程序的正确”,而
14、是“驾驭调试的方法和技术”,要学会自己找问题,这样渐渐自己就会写出错误较少的好用程序。 五、代码的实现 #include #include #define MAXSIZE 100 struct student int num; char name20; char sex5; char cla30; int semester; char course30; int score3; struct student *next; ; struct list int cla; struct student *head; ; void CreatClaStudent(struct list Cla,int
15、 n)/创建班级 char ch; int i; i = 1; struct student *head,*p,*q; head = (struct student *)malloc(sizeof(struct student); q = p = head; while(i printf(输入第%d个班级的信息:n,i); struct student *head,*p,*q; head = (struct student *)malloc(sizeof(struct student); Clai.head = p = head; while(1) printf(输入学号:n); scanf(
16、%d,&head-num); printf(输入姓名:n); scanf(%s,head-name); head-score0 = 0; head-score1 = 0; head-score2 = 0; getchar(); printf(是否接着?n); scanf(%c,&ch); if(ch = n) break; p = (struct student *)malloc(sizeof(struct student); head-next = p; head = p; head -next = NULL; i+; void print(struct list Cla,int n)/输出
17、学生信息 根据班级输出 struct student *p; int i=1; while(i p = Clai.head; printf(移动%d班学生信息n,i); while(p != NULL) printf(%dt,p-num); printf(%st,p-name); printf(%dt%dt%d,p-score0,p-score1,p-score2); p = p-next; printf(n); printf(n); i+; void StudentId(struct list Cla,int n)/根据学号输入成果 int score1,score2,score3; int
18、 t; int key; printf(输入学号:); scanf(%d,&key); int i; i = 1; struct student *p; while(i p = Clai.head; while(p != NULL) if(p-num = key) printf(输入3门成果:); scanf(%d%d%d,&score1,&score2,&score3); p-score0 = score1; p-score1 = score2; p-score2 = score3; t = 0; p = p-next; i+; if(t != 0) printf(该学号不存在!n); vo
19、id ClaId(struct list Cla,int n) int i = 1; struct student *p; while(i printf(录入%d班级的成果n,i); p = Clai.head; while(p != NULL) printf(输入学号为%d的学生成果:,p-num); scanf(%d%d%d,&p-score0,&p-score1,&p-score2); p = p-next; printf(成果录入结束n); i+; void StudentNumberChange(struct list Cla,int n) int i = 1; int key; i
20、nt score1,score2,score3; int t; printf(请输入学号:); scanf(%d,&key); struct student *p; while(i p = Clai.head; while(p != NULL) if(p-num = key) printf(请输入新的成果:); scanf(%d%d%d,&score1,&score2,&score3); p-score0 = score1; p-score1 = score2; p-score2 = score3; t = 0; p = p-next; i+; if(t != 0) printf(该学号不存在
21、!n); void ClaNumChange(struct list Cla,int n) int cla; int score1,score2,score3; char ch; struct student *p; printf(输入须要修改信息的班级号%d-%d:,1,n); scanf(%d,&cla); p = Clacla.head; while(p != NULL) printf(是否要修改%d的成果:,p-num); getchar(); scanf(%c,&ch); if(ch = n) p = p-next; continue; printf(输入新的成果:); scanf(
22、%d%d%d,&score1,&score2,&score3); p-score0 = score1; p-score1 = score2; p-score2 = score3; p = p-next; void TotalGrade(struct list Cla,int n) int sum = 0; int average; int k; int cla; printf(输入班级号%d-%dn,1,n); scanf(%d,&cla); struct student *p; p = Clacla.head; while(p != NULL) sum = p-score0 + p-scor
23、e1 + p-score2; average = sum / 3; printf(%d的总成果是%d平均成果是%dn,p-num,sum,average); p = p-next; void QueryResults(struct list Cla,int n) int i = 1; int key; int t; struct student *p; printf(请输入学号:); scanf(%d,&key); while(i p = Clai.head; while(p != NULL) if(p-num = key) printf(学号为%d的学生移动%d班,p-num,i); pri
24、ntf(%dt%dt%dn,p-score0,p-score1,p-score2); t = 0; break; p = p-next; if(t != 0) printf(该学生不存在于%d班n,i); i+; void NotPa(struct list Cla,int n) int cla; printf(请输入班级号%d-%d:,1,n); scanf(%d,&cla); struct student *p; p = Clacla.head; printf(%d班不及格名单n,cla); while(p != NULL) if(p-score0 score1 score2 printf
25、(%dt%st,p-num,p-name); if(p-score0 printf(语文t%dt不及格t,p-score0); if(p-score1 printf(线性代数t%dt不及格t,p-score1); if(p-score2 printf(英语t%dt不及格t,p-score2); printf(n); p = p-next; void Transcript(struct list Cla,int n) int cla; printf(请输入班级号:); scanf(%d,&cla); struct student *p; p = Clacla.head; while(p != N
26、ULL) printf(%dt%st%dt%dt%dn,p-num,p-name,p-score0,p-score1,p-score2); p = p-next; void menu() printf( 0、退出系统n); printf( 1、创建班级n); printf( 2、输出学生信息n); printf( 3、根据学号录入学生成果n); printf( 4、根据班级录入学生成果n); printf( 5、根据学号修改学生成果n); printf( 6、根据班级修改学生成果n); printf( 7、根据班级统计学生的总成果n); printf( 8、根据学号查询学生成果n); prin
27、tf( 9、根据班级输出不及格学生名单及科目n); printf( 10、根据班级输出学生成果单n); int main() int n; int i; int operation; struct list ClaMAXSIZE; Cla0.head = NULL; Cla0.cla = -1; printf(输入班级数量:n); scanf(%d,&n); while(1) menu(); printf(请选择操作:); scanf(%d,&operation); switch(operation) case 1:CreatClaStudent(Cla,n); break; case 2:p
28、rint(Cla,n); break; case 3:StudentId(Cla,n); break; case 4:ClaId(Cla,n); break; case 5:StudentNumberChange(Cla,n); break; case 6:ClaNumChange(Cla,n); break; case 7:TotalGrade(Cla,n); break; case 8: QueryResults(Cla,n); break; case 9:NotPa(Cla,n); break; case 10:Transcript(Cla,n); break; case 0:exit(
29、-1); return 0; 六、参考文献 1、嵌入式linux上的C语言编程实践 北京亚嵌教化探讨中心、韩超 电子工业出版社 2、linux 下C语言应用编程 杨铸 北京航空航天高校出版社 3、linux 高级程序设计 杨宗德 邓玉春 人民邮电出版社 七、开发环境 开发环境linux操作系统 GNU Compiler Collection程序生成工具软件 嵌入式课程设计 学生信息管理系统 嵌入式系统课程设计 嵌入式系统课程设计题目 嵌入式系统课程设计题目 嵌入式系统设计课程设计大纲(给学生) 嵌入式课程设计报告 嵌入式系统基础课程设计报告 嵌入式系统课程设计教学大纲 嵌入式系统基础课程设计报告 嵌入式程序设计课程设计 本文来源:网络收集与整理,如有侵权,请联系作者删除,谢谢!第28页 共28页第 28 页 共 28 页第 28 页 共 28 页第 28 页 共 28 页第 28 页 共 28 页第 28 页 共 28 页第 28 页 共 28 页第 28 页 共 28 页第 28 页 共 28 页第 28 页 共 28 页第 28 页 共 28 页