C语言课程设计-学生考勤管理系统.doc

上传人:来看看 文档编号:3257923 上传时间:2019-08-06 格式:DOC 页数:30 大小:1.37MB
返回 下载 相关 举报
C语言课程设计-学生考勤管理系统.doc_第1页
第1页 / 共30页
C语言课程设计-学生考勤管理系统.doc_第2页
第2页 / 共30页
C语言课程设计-学生考勤管理系统.doc_第3页
第3页 / 共30页
C语言课程设计-学生考勤管理系统.doc_第4页
第4页 / 共30页
C语言课程设计-学生考勤管理系统.doc_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《C语言课程设计-学生考勤管理系统.doc》由会员分享,可在线阅读,更多相关《C语言课程设计-学生考勤管理系统.doc(30页珍藏版)》请在三一文库上搜索。

1、学生考勤管理系统学生考勤管理系统 目录目录 1.1. 绪论绪论1 1.1 课题背景1 1.2 课题目的和要求1 1.3 课题意义2 2.2. 系统分析系统分析 2 2.1 功能需求2 2.2 数据需求3 2.3 性能需求3 3.3. 总体设计总体设计 3 3.13.1 功能模块设计功能模块设计3 3.2 系统设计方案3 4.4. 详细设计详细设计 4 4.14.1 建立学生缺课记录子模块建立学生缺课记录子模块 .4 4.2 修改学生缺课记录子模块 5 4.3 修改学生缺课记录子模块 6 4.4 查看单科旷课记录子模块 7 4.5 查看学生旷课记录子模块 8 4.6 载入学生旷课记录子模块 9

2、4.7 储存学生旷课记录子模快 9 5.5. 调试与测试调试与测试.10 5.1 调试10 5.2 测试11 6.6. 结论结论11 结束语结束语11 参考文献参考文献11 附录附录 1 1用户手册用户手册12 附录附录 2 2源程序源程序17 学生考勤管理系统 - - 1 摘要 20 世纪末,随着计算机科学的发展,数据库技术在 Internet 中的应用越来 越广泛,为广大网络用户提供了更加周到和人性化的服务。 学生考勤管理程序是信息管理系统的一个子系统,一个基于单机版的系统。 因为随着计算机技术的不断进步与发展,计算机已经深入到人们日常生活的每 个角落,例如:政府部门,企事业单位,学校等等

3、。该系统开发功能主要包括: 管理员可以通过计算机设置学生考勤管理程序,打印供学校及个人使用。 该程序是使用 C 语言编写的学生考勤统计程序。 关键词:考勤;姓名;缺课类型;课程名称。 1.1. 绪论绪论 1.11.1 课题背景课题背景 程序实践是本科生重要教学环节之一。通过程序实践,强化学生的计算机 应用技能,使学生验证、巩固和充实所学的理论知识, 加深对相关内容的理解, 拓宽知识面,培养学生的创新精神和实践能力 学生考勤管理程序是学校管理工作中一个比较重要的任务,过多的学生考 勤管理程序工作给学校管理人员带来了很大麻烦的。虽然原始的记录方法在一 定的程度上可以解决问题,可是现在计算机已经走到

4、了我们的生活,它的不足 之处就显而易见了。 学生考勤管理程序,是一个对于学生考勤的管理系统, 不仅 大大减少了考勤管理人员的大量的工作,而且还方便了班级和学校对学生出课 率的查询,只要通计算机登入本系统就能及时修改、更正学生的考勤信息,使信息 真实、有效。这样节省了大量人力物力,节省了宝贵的时间,大大提高了工作效 率.用 C 语言进行了该系统的编写。操作上力争实现人性化、合理化,满足学校、 老师、非计算机管理人员的使用和查看。 1.21.2 课题目的和要求课题目的和要求 目的:要求实现-“学生考勤管理程序”记录学生的缺课情况,它包括: 缺课日期、第几节课、课程名称、学生姓名、缺课类型(迟到、早

5、 退、请假及旷课)。 学生考勤管理系统 - - 2 要求: 1.录入学生的缺课记录; 2修改某个学生的缺课记录; 3查询某个学生的缺课情况; 4统计某段时间内,某门课旷课学生姓名及旷课次数,按旷课次数 由多到少排序; 5统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由 多到少排序。 1.31.3 课题意义课题意义 程序实践是本科生重要教学环节之一。通过程序实践,强化学生的计算机 应用技能,使学生验证、巩固和充实所学的理论知识, 加深对相关内容的理解, 拓宽知识面,培养学生的创新精神和实践能力 学生考勤管理程序可以大大减缓学生考勤人员的工作量, 方便了平时上课 学生的出勤率的管理。 2.

6、2. 系统分析系统分析 开发一个好的软件,进行深入细致的可行性研究是极其必要的,而且还必须 做大量的,全面的需求分析,需求分析是软件定义时期的最后一个阶段,它更 是开发一个好的软件的基础。它的基本任务是准确地回答“需要此软件的人都 需要哪些功能?”这个问题。 需求分析的主要任务是确定系统必须完成哪些工作,也就是对目标系统提 出完整的准确的具体的清晰的要求,确定系统必须具有的功能和性能, 系统要求的运行环境,以及预测系统发展的前景,并仔细分析系统中的数据, 以便完善良好的软件环境。在需求分析阶段系统分析员将仔细研究软件所需要 完成的具体功能。 2.12.1 功能需求功能需求 本系统主要是学校和老

7、师对学生出课情况的统计系统。 该系统需要有建立,修改,查询,载入,储存,退出功能,利用查询功能 分开查看某一门课程或者某一个学生的缺课记录,方便老师与学校统计。 学生考勤管理系统 - - 3 2.22.2 数据需求数据需求 本系统主要涉及的数据有学生缺课信息。学生缺课信息包括缺课时间,学 生姓名,课程名称,第几节,学生迟到次数,早退次数,请假次数,旷课次数。 2.32.3 性能需求性能需求 要求系统具有可靠性,速度要快。 3.3. 总体设计总体设计 3.13.1 功能模块设计功能模块设计 根据分析整个系统主要划分为 7 个功能模块,分别执行要求中的功能。数 据管理中实现对学生的基本信息、课程的

8、基本信息、学生缺课的查询、添加、 删除和修改,以及具体缺课缺课内容,是迟到、早退、请假、旷课。查询管理 通过根据学生姓名,课程姓名 时间段儿等信息,查询单个学生的缺课记录,单 科课的旷课记录,单个学生的旷课记录。功能模块图如图 1 所示。、 学生考勤管理程序 修 改 学 生 缺 课 记 录 查 看 学 生 旷 课 记 录 查 看 单 科 旷 课 记 录 查 询 学 生 缺 课 记 录 建 立 学 生 缺 课 记 录 储 存 学 生 旷 课 记 录 载 入 学 生 旷 课 记 录 图 1 功能模块图 3.23.2 系统设计方案系统设计方案 此程序是过程性语言设计的。运用多种条件语句,主体采用的是

9、链表指针。 系统的设计采用了数组语句、选择语句和循环语句,在需要处理大量同类数据时,这 样就使程序书写更加简洁。程序使用了布尔函数。选择语句多采用 if 多分支选 择结构与 switch 语句。首先计算 switch 表达式,然后在 caes 子句中寻找值相 学生考勤管理系统 - - 4 等的常量表达式,并以此为入口符号,由此开始顺序执行。循环语句采用了 for 语句等、do-while 语句,for 语句用于已知循环次数的循环结构,括号中 的三个量分别用来表示循环变量初值、循环终值和循环增量。do-while 语句先 循环后判断, Break 语句在 switch 语句中,保证多分支情况的正

10、确执行,在 循环语句中,强制终止本层循环。保存和读取函数是典型的函数功能,一个程 序是由若干个函数组成的,保存和读取函数是和其他函数互相调用的。 4.4. 详细设计详细设计 4.14.1 建立学生缺课记录子模块建立学生缺课记录子模块 要建立的学生人数,学生基本信息(包括缺课时间、学生姓名、课程名称、 第几节、迟到次数、早退次数、请假次数、旷课次数)可用 creat()函数 如图 1. 开始 int i,b; struct student *head,*p1,*p2; printf(“请输入要建立 资料的学生人数:“); scanf(“%d“, head=p2=NULL; p1=(struct

11、student *)malloc(LEN); 输入第一个学生成绩 head=p1; p2=p1; i=0; student_num+; inext=p1; p2=p1; student_num+; i+ p2-next=NULL 结束 Y N 图 1 学生考勤管理系统 - - 5 4.24.2 修改学生缺课记录子模块修改学生缺课记录子模块 根据要修改的学生姓名以及科目名称找到相应的信息,再选择要修改的项目进 行单项修改 如图 2 char xiugai_name50; char xiugai_xueke_name50; int k; 开始 printf(“请输入要修改的学 生姓名与学科名称:“

12、); scanf(“%s%s“,xiugai_name ,xiugai_xueke_name); struct student *p1,*p2; p2=(struct student *)malloc(LEN); p1=head; strcmp(xiugai_name,p1- name)!=0 strcmp(xiugai_name,p1- name)=0 scanf(“%s“,chaxun _name); int i=0; char chaxun_name50; struct student *p; p=head; iname)=0 输出p所指 向的结构体 数据 i+ 结束 图 3 学生考勤管

13、理系统 - - 7 4.44.4 查看单科旷课记录子模块查看单科旷课记录子模块 根据学科名称和时间范围查出所有在该范围内旷课的学生以及次数 如图 4 开始 struct student *p1,*p2,*p3; char lesson50; long look_time1,look_time2; int xunhuan_num=0; p3=(struct student *)malloc(LEN); p1=head; p2=p1-next xunhuan_numkuangke_nump1- kuangke_num p1=p2; p2=p2-next; p1=head; p2=p1-next;

14、xunhuan_num+; 交换p1与p2指向数 据 printf(“请输入要查看的学科名称:“); scanf(“%s“,lesson); printf(“请输入要查看的时间范围“); scanf(“%ld%ld“, p1=head; p1!=NULL strcmp(lesson,p1- lesson_name)=0 结束 Y N Y Y N N 图 4 学生考勤管理系统 - - 8 4.54.5 查看学生旷课记录子模块查看学生旷课记录子模块 根据要查询的学科名称及时间段查出在改时间段内该门课上旷课的人数 如图 5 开始 int n,i,j,zhongjian; struct student

15、 *p1; char zhongjian_name50; long look_time1,look_time2; printf(“请输入第%d个学科名称:“,i+1); scanf(“%s“,ai.xueke_name); ai.people_num=0; printf(“请输入要查看的时间范围由小到大 “); scanf(“%ld%ld“, p1=head;i=0; itime p1=head; i+; ai.people_num+=p 1-kuangke_num; jnext; 结束 Y N 图 7 5.5. 调试调试与测试与测试 5.15.1 调试调试 (1)此程序是用 VC 程序编写,

16、调试过程中在菜单中选择乍看学生旷课记录, 程序不执行。因为没有加入选择的 case 语句。后在 switch 后加一个 case 就可 以自动执行了。 学生考勤管理系统 - - 11 5.25.2 测试测试 (2)由于程序的源代码是在记事本文本中复制到 VC 中的,有些 printf 后比较 长的语句会被放到下一行,使程序出现多处类似的错误,经过在 VC 中的修改, 程序得以正常的运行 6.6. 结论结论 课程设计顺利完成,题目所要求的功能也都一一实现,可以对学生的缺课 信息进行添加,修改,删除以及查询的显示。不过这个程序还有些不够完善, 例如不能往当前文件夹中的 txt 文件中添加记录。 结

17、束语结束语 整个系统的设计过程对于我来说算是个学习、探索的过程,通过实践和对 比别人开发程序的过程。在整个设计过程中,出现过很多的问题,很多繁琐的 东西都需要反复的修改,主要是前期工作不彻底,对系统的需求分析的要求认 识不够清楚,使得在后边的工作中不得不经常反复去修改。使我体会到设置中 每一步的重要性。所以在分析一个问题时,我们需要站在一个有远见的高度。 通过此次设计,我不但对 C 语言编程有了更深刻的认识,积累了使用软件 工程的思想来开发软件的经验,更重要的是学会了在对待问题时应该考虑到哪 些方面和怎么解决问题。 虽然时间紧迫但我学会了很多,也感到自身知识的贫乏,希望在日后的努力 中能做出更

18、完善的系统。 参考文献参考文献 1谭浩强.C 语言程序设计(第三版).清华大学出版社 2林碧英.C 语言程序设计教程.中国电力出版社,2006 3美赫伯特.希尔特,王子恢等译.C 语言大全.电子工业出版社.2006 4姜灵芝,余健.C 语言课程设计案例精选.清华大学出版社,2008 学生考勤管理系统 - - 12 附录附录 1 1用户手册用户手册 主菜单 图 1 主菜单 1.建立学生缺课记录 图 2 建立学生缺课记录 学生考勤管理系统 - - 13 2.修改学生缺课记录 图 3 修改学生缺课记录 3.查询学生缺课记录 图 4 查询学生缺课记录 学生考勤管理系统 - - 14 4.查看单科旷课记

19、录 图 5 查看单科旷课记录 5.查看学生旷课记录 图 6 查看学生旷课记录 学生考勤管理系统 - - 15 6.储存学生旷课记录 图 7 储存学生旷课记录 7.载入学生旷课记录 图 8 载入学生旷课记录 学生考勤管理系统 - - 16 8. 退出程序 图 9 退出程序 学生考勤管理系统 - - 17 附录附录 2 2源程序源程序 #include #include #include #define NULL 0 #define LEN sizeof(struct student) int student_num; FILE *fp1; struct xueke char xueke_name

20、50; int people_num; ; struct xueke a10; struct student char name50; long time; int lesson_time; char lesson_name50; int chidao_num; int zaotui_num; int qingjia_num; int kuangke_num; struct student *next; ; void chaxun(struct student *head) int i; char chaxun_name50; printf(“请输入要查询的人名【若没有这个人则不显示】:“);

21、 学生考勤管理系统 - - 18 scanf(“%s“,chaxun_name); struct student *p; if(head=NULL) printf(“联系人为空“); p=head; for(i=0;iname)=0) printf(“缺课时间:%ld 学生姓名:%s 课程名称:%s 第%d 节 迟到 次数:%d 早退次数:%d 请假次数:%d 旷课次 数:%dn“,p-time,p- name,p-lesson_name,p-lesson_time,p-chidao_num,p-zaotui_num,p- qingjia_num,p-kuangke_num); p=p-nex

22、t; struct student *xiugai(struct student *head) char xiugai_name50; char xiugai_xueke_name50; int k; printf(“请输入要修改的学生姓名与学科名称【格式:学生姓名(空格)学 科名称】:“); scanf(“%s%s“,xiugai_name,xiugai_xueke_name); struct student *p1,*p2; p2=(struct student *)malloc(LEN); p1=head; if(head=NULL) printf(“没有学生信息n“); return(

23、head); while(strcmp(xiugai_name,p1-name)!=0 学生考勤管理系统 - - 19 if(strcmp(xiugai_name,p1-name)=0 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(“=n“); scanf(“%

24、d“, switch(k) case 1: printf(“请输入新的缺课时间“); scanf(“%ld“, break; case 2: printf(“请输入新的学生姓名“); scanf(“%s“,p1-name); break; case 3: printf(“请输入新的课程名称“); scanf(“%s“,p1-lesson_name); break; case 4: printf(“请输入新的第几节缺课“); scanf(“%d“, 学生考勤管理系统 - - 20 break; case 5: printf(“请输入新的迟到次数“); scanf(“%d“, break; cas

25、e 6: printf(“请输入新的早退次数“); scanf(“%d“, break; case 7: printf(“请输入新的请假次数“); scanf(“%d“, break; case 8: printf(“请输入新的旷课次数“); scanf(“%d“, break; return(head); struct student *creat() int i,b; struct student *head,*p1,*p2; printf(“请输入要建立资料的学生人数:“); scanf(“%d“, head=p2=NULL; p1=(struct student *)malloc(LE

26、N); 学生考勤管理系统 - - 21 printf(“【输入格式:缺课时间(空格)学生姓名(空格)课程名称(空格) 第几节(空格)迟到次数(空格)早退次数(空格)请假次数(空格)旷课次数】n“); printf(“请输入第 1 名学生信息:“); scanf(“%ld%s%s%d%d%d%d%d“, head=p1; p2=p1; student_num+; for(i=1;itime,p1-name,p1-lesson_name, p2-next=p1; p2=p1; student_num+; p2-next=NULL; return(head); void print(struct s

27、tudent *head) struct student *p; p=head; if(p=NULL) printf(“没有学生信息n“); while(p!=NULL) 学生考勤管理系统 - - 22 printf(“缺课时间:%ld 学生姓名:%s 课程名称:%s 第%d 节 迟到次数: %d 早退次数:%d 请假次数:%d 旷课次数:%dn“,p-time,p-name,p- lesson_name,p-lesson_time,p-chidao_num,p-zaotui_num,p- qingjia_num,p-kuangke_num); p=p-next; struct student

28、 *tongji_lesson(struct student *head) struct student *p1,*p2,*p3; char lesson50; long look_time1,look_time2; int xunhuan_num=0; p3=(struct student *)malloc(LEN); if(head=NULL) printf(“没有学生信息“); return(head); p1=head; p2=p1-next; while(xunhuan_numkuangke_nump1-kuangke_num) p3-chidao_num=p2-chidao_num

29、; p3-kuangke_num=p2-kuangke_num; p3-qingjia_num=p2-qingjia_num; p3-zaotui_num=p2-zaotui_num; p3-lesson_time=p2-lesson_time; p3-time=p2-time; strcpy(p3-lesson_name,p2-lesson_name); 学生考勤管理系统 - - 23 strcpy(p3-name,p2-name); p2-chidao_num=p1-chidao_num; p2-kuangke_num=p1-kuangke_num; p2-qingjia_num=p1-q

30、ingjia_num; p2-zaotui_num=p1-zaotui_num; p2-lesson_time=p1-lesson_time; p2-time=p1-time; strcpy(p2-lesson_name,p1-lesson_name); strcpy(p2-name,p1-name); p1-chidao_num=p3-chidao_num; p1-kuangke_num=p3-kuangke_num; p1-qingjia_num=p3-qingjia_num; p1-zaotui_num=p3-zaotui_num; p1-lesson_time=p3-lesson_ti

31、me; p1-time=p3-time; strcpy(p1-lesson_name,p3-lesson_name); strcpy(p1-name,p3-name); p1=p2; p2=p2-next; p1=head; p2=p1-next; xunhuan_num+; printf(“请输入要查看的学科名称:“); scanf(“%s“,lesson); printf(“请输入要查看的时间范围【输入格式:时间(空格)时间】“); scanf(“%ld%ld“, 学生考勤管理系统 - - 24 p1=head; while(p1!=NULL) if(strcmp(lesson,p1-le

32、sson_name)=0 p1=p1-next; return(head); struct student *tongji_student(struct student *head) int n,i,j,zhongjian; struct student *p1; char zhongjian_name50; long look_time1,look_time2; if(head=NULL) printf(“没有学生信息“); return(head); printf(“请输入一共的学科数:“); scanf(“%d“, for(i=0;itime p1=p1-next; p1=head; f

33、or(j=0;jchidao_num=student_ziliaoi.chidao_num; p1-kuangke_num=student_ziliaoi.kuangke_num; strcpy(p1-lesson_name,student_ziliaoi.lesson_name); p1-lesson_time=student_ziliaoi.lesson_time; strcpy(p1-name,student_ziliaoi.name); p1-qingjia_num=student_ziliaoi.qingjia_num; p1-time=student_ziliaoi.time; p

34、1-zaotui_num=student_ziliaoi.zaotui_num; p2-next=p1; p2=p1; p1=(struct student*)malloc(LEN); p2-next=NULL; return(head); void chucun(struct student *head) struct student *p1; p1=head; fp1=fopen(“xueshengziliao.txt“,“wb+“); while(p1!=NULL) fwrite(p1,LEN,1,fp1); 学生考勤管理系统 - - 27 p1=p1-next; fclose(fp1)

35、; printf(“储存成功n“); void main() struct student *head; int m; do 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(“*n“); scanf(“%d“, switc

36、h(m) case 1: head=creat(); print(head); break; case 2: head=xiugai(head); 学生考勤管理系统 - - 28 print(head); break; case 3: chaxun(head); break; case 4: head=tongji_lesson(head); break; case 5: head=tongji_student(head); break; case 6: head=zairu();print(head); break; case 7: chucun(head); break; while(m!=8); 学生考勤管理系统 - - 29 完成日期:2010 年 7 月 15 日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 信息产业


经营许可证编号:宁ICP备18001539号-1