




已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
附件二 【学生用】西北农林科技大学信息工程学院实习报告题 目:学生作业完成情况管理系统 学 号姓 名专业班级指导教师实践日期目 录一、综合训练目的与要求1二、综合训练任务1三、总体设计1四、详细设计说明3五、测试说明5六、实习日志9七、实习总结10八、附录:核心代码清单10一、综合训练目的与要求正文本综合训练是计算机科学与技术、信息管理与信息系统、软件工程专业重要的实践性环节之一,是在学生学习完程序设计语言(c)、数据结构课程后进行的一次全面的综合练习。本课综合训练的目的和任务:1 巩固和加深学生对c语言、数据结构课程的基本知识的理解和掌握2 掌握c语言编程和程序调试的基本技能3 利用c语言进行基本的软件设计4 掌握书写程序设计说明文档的能力5 提高运用c语言、数据结构解决实际问题的能力二、综合训练任务题目:学生作业完成情况管理系统:假设某门课程一学期要留10次作业,每次老师要进行批改,给出分数后还要进行登记。学期期末要根据每次作业的成绩计算出最终的平时成绩。要求:1. 用户注册登录功能;2. 通过键盘输入某位学生某次作业的分数;3. 从磁盘文件导入学生信息;4. 给定学号,显示某位学生作业完成情况;5. 给定某个班级的班号,显示该班所有学生的作业完成情况;6. 给定某位学生的学号,修改该学生的作业完成信息;7. 给定某位学生的学号,删除该学生的信息;8. 按班级号查询该班学生成绩;9. 按学号查询该学生成绩;10. 将所有学生成绩按降序排列。三、总体设计程序整体分为用户登录部分、获取数据部分、数据处理及处理信息反馈部分、数据导出保存部,。程序功能模块如图1、图2所示。登录部分登陆注册退出 学生作业完成情况管理程序手动输入学生姓名班级学号各次作业分数从文件导入学生信息输入学号,显示某位学生作业完成情况输入班号,显示该班学生的作业完成情况输入学生的学号,修改该学生的各类信息输入学生的学号,删除该学生的信息显示各类统计信息返回主菜单清屏导出至文件默认路径导入自定义路径导入修改姓名修改班级修改成绩按学号查询平均成绩(最终成绩)按班级查看平均成绩(最终成绩)查看平均成绩降序序列默认路径导出自定义路径导出 图2 程序流程:登录部分分为登录、注册和退出三部分。程序采取一次性注册,即用户名与密码不可修改,每次只能注册一个用户名。登录之前需要先注册,否则登录时程序会提示“未注册”,第二次注册程序会提示“账户已存在,请返回登录”。登录成功后会提示登录成功,选择退出时,程序会结束。第二部分为登录成功后,进入系统可进行的操作,可以在系统中输入学生的各项信息和成绩,也可以从文件中直接导入(文件中保存的信息应该依次是姓名、学号、班级号、连续十次的成绩,各个信息用空格隔开)。文件导入分为默认路径导入和自定义路径导入,导入方式决定于用户上次导出时(即保存信息时)的选择,导出部分和导入部分相同,为了不会在异常情况下导致数据丢失,导出时都采用追加式导入文件(之前导出信息不会被覆盖),可以自己进入导出文件或在程序中将无效信息删除。四、详细设计说明int main()void user_log()void input()void read_file()int log()school_num_search(st);class_num_search(st);school_num_change(st);school_num_delete(st);void creat_files(stupt st,file* &fp)statistics_result(st);system(cls);printf_help();void inpu()void login()void printf_log()write_in_file(a,name,fp);void read_passwd(a,name,fp);void log_timefilep_read_to_st(st,fp);read(p,fp);search(st,snum);void printf_score(stupt p)search_2(st,clnum);void printf_infor(stupt p)search_3(st,snum);void change(stupt&p)change_name(p);change_class(p);change_score(p);printf_help_2();delete_pt(st,snum);printf_infor(q);void fileprintf(stupt st,file* fp)cnum_check_aver(st);printf_help_3();descending_order_check(st);snum_check_aver(st);system(color f9);int aver(stupt p)search_4(st,snum);int aver(stupt p)search_5(st,cnum);int aver(stupt p)选3开始已注册?注册n登录读取信息?y默认路径自定义路径y(选2)选a选bn(选1)手动输入查询信息总体信息?输学号查该生信息全部成绩降序排列y选4输班号查该班信息输班号查平均成绩输学号查平均成绩选1n(选7)选3选2修改、删除信息修改信息?y(选5)选1选2选3修改班级修改姓名修改成绩删除信息n(选6)清除屏幕退出?返回主菜单n(选8)y(选a)默认路径导出自定义路径导出结束五、测试与分析5.1测试环境该程序是在windows xp的code blocks的环境下完成的。5.2测试过程1. 登录部分:登录时菜单,第一次直接运行.exe文件时必须要自己先在该目录下passwd.txt,然后注册,如已注册则第二无法继续注册2. 如果该文件不存在,注册是会有以下提示图3. 文件导出,选择a会默认导出到程序所在目录下的d:student_homework_infor.txt;也可以选择b自定义导出,格式不限(一般就.doc、.eio、.txt;定义为.infor、.reg、.exe也可以4.导入成功,查看成绩5.按提示删除成绩6.按提示修改成绩7.退出5.3测试分析1. 存在不能完全清空缓冲区问题,导致一旦输入错误程序无法继续正常运行,无论输入什么,会不断弹出输入错误提示, 结果使得程序变得不可操作,也不能正常结束,通过编写clear()函数,每次输入之后彻底清空缓冲区,让程序出错的可能降到极低;2. 在第七部分第三项按平均成绩给学生排序的哪里,开始采用的是降序输出,即不排序,每次仅找到上次最大值结点的次大值结点并输出信息,在遇到有很多平均成绩相同的结点无法正常输出;后来采用将学生信息链表按平均成绩大小插入到一个新的空链表中(即对其排序),排好后在让st(头指针)指向空链表头的下一个,使得问题解决;3. 在文件导入时,因为使用feof();开始采用的是先判断后读取,使得读入信息最后一项为随机值,随后上网了解资料之后之后采用先读取,后判断,问题得到解决。六、实习日志2012年7月6日 星期五今天是实习的第一天,我的题目是学生作业完成情况管理系统。我觉得首先应该对于程序的功能有一个大的框架,经过和同学老师的商量讨论,在题目要求的基础上拓展了好多的功能,下一步就是通过代码实现功能了。2012年7月7日 星期六实习的第二天,在老师的提议下开始详细的写设计说明。我用流程图的形式将功能展示出来,这样会使各个功能之间的关系看起来一目了然。看来是万事俱备只欠东风咯2012年7月8日 星期日今天开始编程序,发现并没有想象中的那么顺利。所以首先将该用到的程序好好复习了一下,感觉心里踏实多了。然后开始着手编小程序,到时候再把他们连接在一起就好。只是真正动手做起来好难啊,只做了一点点就头晕眼花的。2012年7月9日 星期一今天继续编一个个子函数,有了昨天的铺垫,觉得不那么难了。通过不断的试验和请教老师同学,终于完成好多的子函数,仿佛已经看到的一片光明的“未来”,哈哈。2012年7月10日 星期二今天已经是实习的第五天了,我动用了一切可以动用的资源,终于完成了各个子函数的编程。我根据之前的画流程框图一步步的构建嵌套的大框架,只可惜最终才完成了一部分。虽然有点累,但还是很开心,觉得过的无比的充实。2012年7月11日 星期三今天继续完成程序框架的嵌套,功夫不负有心人,总算是弄完了。无比激动的运行之后发现就编译错误就有好多,这无疑给我泼了一大盆的冷水。虽然觉得很麻烦,但是没办法,还是乖乖的改吧2012年7月12日 星期四今天继续修改程序,按照计划今天可是最后一天改程序了,时间紧迫。我集中精力的排查错误,终于基本改好了,剩下的一点点小问题。只能留到明天解决了。2012年7月13日 星期五今天调动所有的脑细胞,终于将程序完全的完全的改完了,开始写课程设计报告了。这个报告只要按自己的真实想法真心体会来写,比编程序轻松多了呢。2012年7月14日 星期六今天完成了实习报告的撰写和整合,并且向老师建议的那样再做了ppt。让我对自己程序的框架更加的明白,还锻炼了其他各个方面的能力,真是一举多得啊!七、实习总结为期十天的数据结构与c语言应用实习就告一段落了,经过这段时间的实习,我确实收获了很多。自己的数据结构本来学的就很不扎实,所以实习一直很忐忑,本来还想着在网上找点资料,后来也是以失败告终。看着同学们都好好的完成作业,我也决定通过自己的努力来实现程序要求的功能。刚开始的时候一直和老师同学多多讨论,终于自己有了一些思路。为了成功的编写代码我一直查看课本,没当自己编出哪怕小小的一个简单的程序,我也会开心好久。终于我的程序完成了,虽然过程很坎坷,但是毕竟是自己完成的。这几天的实习让我对c语言和数据结构有了更深层次的了解。我相信以后我还是会像这次一样不论多艰难都会完成自己的目标的。八、附录:核心代码清单#include #include #include #include #include #include #include typedef struct student char name10; int schoolnumber; int classnumber; float score10; struct student *next; stu,*stupt;stupt st=null;/学生信息的头指针stupt qt=null;/学生信息的尾指针file* fp;/文件指针typedef struct user char logname10; char passwd6;*userpt,user;/-clear-/void clear(void)/清空缓冲区函数 char ch; do ch=getchar(); while(ch!=n);/主菜单/void printf_help() printf( n); printf( |*尊敬的用户请您选择操作: *|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); printf( |* 9.清屏 *|n); printf( |* a.导出至文件 *|n); printf( |* 0.退出系统 *|n); printf( n); printf(:);/-1-/输入成绩/void inpu(stupt p) int n; int m=0; int flag; while(mscorem=0; m+; printf(请您输入姓名:); scanf(%s,p-name); clear(); printf(请您输入学号:); scanf(%d,&p-schoolnumber); clear(); printf(请您输入班级号(如:101):); scanf(%d,&p-classnumber); clear(); do printf(请您输入第几次作业(110):); scanf(%d,&n); clear(); printf(请您输入该次作业成绩:); scanf(%f,&p-scoren-1); clear();/清空缓冲区 printf(您是否继续输入该生成绩,退出请按q,其他键继续:); flag=getchar(); clear();/清空缓冲区堆积 while(flag!=q);void input(stupt&st,stupt&qt) char flag; stupt p,q; p=q=null; printf(请问您确认输入?y.是 n.取消(注意大小写)n); while(flag=getchar()!=n) clear();/清空缓冲区 if(flag=y) p=(stupt)malloc(sizeof(stu); if(p=null) exit(1); inpu(p); if(st=null) st=qt=p; else if(qt!=null) qt-next=p; /尾指针非空(及链表已存在)接着尾指针建立链表 qt=p; else printf(温馨提示:您存在非法输入,请进入菜单界面重新选择(按8或9):); return; printf(请问您是否继续输入?y.是 n.否(注意大小写)n); if(flag=n) printf_help(); clear(); if(p!=null&qt!=null) qt-next=null; /-2-/导入成绩/void read(stupt p,file* fp) fscanf(fp,%s,p-name); fscanf(fp,%d,&p-schoolnumber); fscanf(fp,%d,&p-classnumber); fscanf(fp,%f,&p-score0); fscanf(fp,%f,&p-score1); fscanf(fp,%f,&p-score2); fscanf(fp,%f,&p-score3); fscanf(fp,%f,&p-score4); fscanf(fp,%f,&p-score5); fscanf(fp,%f,&p-score6); fscanf(fp,%f,&p-score7); fscanf(fp,%f,&p-score8); fscanf(fp,%f,&p-score9); /fread(p,sizeof(stu),1,fp);/*int judge(file * fp) int ch; ch=fgetc(fp); fseek(fp,-1l,seek_cur);/回退一个字符位 if(ch=eof) return 1; else return 0;/返回1文件结尾*/void filep_read_to_st(stupt &st,file* fp) /int k; stupt p; st=null;/置空st,准备从文件中导入学生信息 while(1) /if(judge(fp) break; p=(stupt)malloc(sizeof(stu); read(p,fp); if(feof(fp) break; if(st=null) st=qt=p; else if(qt!=null) qt-next=p; /尾指针非空(即链表已存在)接着尾指针建立链表 qt=p; if(feof(fp) qt-next=null; /如果文件结束,尾指针next指空 /k=judge(fp); /printf(%d,k); if(st!=null&feof(fp) printf(温馨提示:您的文件导入成功!n); else printf(温馨提示:您的文件导入失败,请重新导入!n);void readfile(stupt &st,file* fp) char flag,flag_1; char filename90; printf(温馨提示:您如果在导入前有过手动输入,请先导出至文件后再进行导入,否则输入那部分数据将丢失。n); printf(按任意键继续,退出请按q:); flag_1=getchar(); clear(); if(flag_1=q) return; lab_2: printf(请您选择:a.程序默认路径导入(之前导出时需要是默认导出) b.自定义导入路径(请确保导入路径合法):); flag=getchar(); clear(); if(flag=b) printf(请您输入导入路径(请确保导入路径合法)(如c:.student_homework_infor.txt):); scanf(%s,filename); clear(); if(access(filename,0)=1) printf(温馨提示:您的文件路径不合法或文件不存在,请重新选择!n); goto lab_2; fp=fopen(filename,rb); if(fp=null) printf(温馨提示:打开%s文件失败,请返回主菜单重试!n,filename); return; else filep_read_to_st(st,fp); fclose(fp); else if(flag=a) fp=fopen(student_homework_infor.txt,r); if(access(student_homework_infor.txt,0)=1) printf(温馨提示:您的文件不存在!n); if(fp=null) printf(温馨提示:打开程序所在目录下的student_homework_infor.txt文件失败,请返回主菜单重试!n); return; else filep_read_to_st(st,fp); fclose(fp); else printf(温馨提示:您存在非法输入!程序将返回主菜单.n); /-3-/按学号查询/void printf_score(stupt p) int n=0; printf(前十次成绩如下:n); printf(n); while(nscoren); n+; printf(n);void search(stupt&st,int snum) stupt p,q; if(st=null) printf(未建立学生信息表,请返回主菜单输入或导入所有学生的信息n); return; else p=st; q=p-next; if(p-schoolnumber=snum) printf_score(p); /查找成功输出并返回上级函数 return; while(q!=null) if(q-schoolnumber=snum) printf_score(q); /查找成功输出并返回上级函数 return; q=q-next;/下一个 printf(查询失败,该学号学生信息不存在n);void school_num_search(stupt&st) int snum; char flag; do printf(请输入要查找的学生学号(如221):); scanf(%d,&snum); clear();/清空scanf结束时进入缓冲的enter符 search(st,snum); printf(退出请按q,其它任意键继续查找:); flag=getchar(); clear();/清空回车符 while(flag!=q); if(flag=q) printf_help(); /-4-/给定班级查询/void printf_infor(stupt p) printf(%-5d%-8s%-5d%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1fn,p-classnumber,p-name,p-schoolnumber,p-score0,p-score1,p-score2,p-score3,p-score4,p-score5,p-score5,p-score7,p-score8,p-score9); printf(n);void search_2(stupt st,int clnum) stupt p,q; int f=0; if(st=null) printf(未建立学生信息表,请返回主菜单输入所有学生的信息n); return; else p=st; q=p-next; printf(班级 姓名 学号 成绩1 成绩2 成绩3 成绩4 成绩5 成绩6 成绩7 成绩8 成绩9 成绩10n); printf(n); if(p-classnumber=clnum) printf_infor(p); f+; /查找成功输出 while(q!=null) if(q-classnumber=clnum) printf_infor(q); f+; /查找成功输出 q=q-next;/下一个 if(f=0) printf(没有该班级学生信息n); void class_num_search(stupt st) int clnum; char flag; do printf(请输入班级(如101):); scanf(%d,&clnum); clear();/清空scanf结束时进入缓冲的enter符 search_2(st,clnum); printf(退出请按q,其它任意键继续查找:); flag=getchar(); clear();/清空回车符 while(flag!=q); if(flag=q) printf_help(); /-5-/修改姓名班级成绩/void change_name(stupt& p) printf(原姓名为:%sn,p-name); printf(请输入新姓名:); scanf(%s,p-name); clear();void change_class(stupt& p) printf(原班级为:%dn,p-classnumber); printf(请输入新班级:); scanf(%d,&p-classnumber); clear();void change_score(stupt&p) int n; char flag; do printf(请输入:要修改的作业的次数(110):); scanf(%d,&n); clear(); printf(原成绩为:%fn,p-scoren-1); printf(请输入:该次作业新成绩:); scanf(%f,&p-scoren-1); clear();/清空缓冲区 printf(是否继续修改该生成绩,退出请按q,其他键继续); flag=getchar(); clear(); while(flag!=q);void printf_help_2() printf( n); printf( |* 请选择操作: *|n); printf( |* 1.修改姓名 *|n); printf( |* 2.修改班级 *|n); printf( |* 3.修改成绩 *|n); printf( |* 0.返回 *|n); printf( n); printf(:);void change(stupt&p) char a; printf_help_2(); while(a=getchar()!=0) clear(); printf(班级 姓名 学号 成绩1 成绩2 成绩3 成绩4 成绩5 成绩6 成绩7 成绩8 成绩9 成绩10n); printf(n); printf_infor(p); switch(a) case 1: printf(您选择了:1.修改姓名n); change_name(p); break; case 2: printf(您选择了:2.修改班级n); change_class(p); break; case 3: printf(您选择了:3.修改成绩n); change_score(p); break; default: printf(非法输入,请重新选择!n); break; printf_help_2(); if(a=0) clear(); printf(您选择了:0.返回n); void search_3(stupt&st,int snum) stupt p,q; int f=0; if(st=null) printf(未建立学生信息表,请返回主菜单输入或导入所有学生的信息n); return; else p=st; q=p-next; if(p-schoolnumber=snum) change(p); /查找成功并修改 f+; return; while(q!=null) if(q-schoolnumber=snum) change(q); /查找成功并修改 return; q=q-next;/下一个 if(f=0) printf(没有该学生信息n); void school_num_change(stupt&st) int snum; char flag; do printf(请输入要修改学生学号(如101):); scanf(%d,&snum); clear();/清空scanf结束时进入缓冲的enter符 search_3(st,snum); printf(退出请按q,其它任意键继续按学号查找修改信息:); flag=getchar(); clear();/清空回车符 while(flag!=q); if(flag=q) printf_help(); /-6-/删除学生信息/void delete_pt(stupt&st,int snum
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中交集团纪委第一办案中心招聘考前自测高频考点模拟试题及完整答案详解1套
- 无人机航测可行性研究报告
- 重难点解析冀教版7年级下册期末测试卷及参考答案详解【考试直接用】
- 自考专业(电子商务)常考点试卷含答案详解【典型题】
- 自考专业(公共关系)题库及参考答案详解【新】
- 文化产品开发与品牌保护管理研究
- 环保领域水资源保护项目合作协议
- 环保公司质量检验管理规章
- 重难点解析山东省招远市中考数学真题分类(勾股定理)汇编章节测评试题(含详解)
- 福建省福州市八县一中2026届化学高一第一学期期末教学质量检测模拟试题含解析
- 父女关系断绝书
- 2025年华侨港澳台学生联招考试英语试卷试题(含答案详解)
- 《晚期肾癌新视点》课件
- 三年级 人教版 数学 第六单元《两位数乘一位数(不进位)口算》课件
- 民爆信息系统网络服务平台
- 2025年度智慧企业ERP系统集成与运维服务合同模板2篇
- 2024年优居房产全国加盟手册3篇
- 污水处理工程施工工程组织设计
- 氨基酸作为药物靶点
- 经销商独家授权书
- 第9课-秦统一中国【课件】1
评论
0/150
提交评论