下载

3下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 C语言课程设计总结报告

C语言课程设计总结报告.doc

C语言课程设计总结报告

叶浅子
2011-06-02 0人阅读 举报 0 0 暂无简介

简介:本文档为《C语言课程设计总结报告doc》,可适用于高等教育领域

西安理工大学C语言程序设计课程设计报告设计题目:学生考勤系统设计专业自动化班级自动化学生朱胜佳指导教师梁德胜年春季学期设计任务:C语言课程设计任务书题目:学生考勤系统设计功能:学生考勤系统应包含各班学生的全部信息。每个学生是一条记录包括姓名、性别、学号、日期、节次、出勤情况等信息。本系统可以模拟考勤过程、记录考勤结果并能在课程结束后按照设定的考勤评分标准自动给出每个学生的考勤分数。要求:、用C语言实现程序设计、利用结构体进行相关信息处理、系统的各个功能模块要求用函数的形式实现、界面友好(良好的人机交互)程序加必要的注释。平时成绩:验收答辩成绩:设计报告成绩:总评成绩:指导教师:一、总体设计.程序的总体设计◎确定界面使用户可选择操作项目(录入修改查询评分)。◎录入功能:使用结构体要求用户输入姓名、性别、学号、日期、节次、当前出勤情况等信息并写入文件。◎修改功能:使用户输入学号姓名其中一项可以修改考勤其信息。对于修改功能的实现是先将所有文件内容读入到内存中然后修改考勤值最后再重新覆盖写入文件。◎查询模块:使用字符串比较函数利用循环找到对应结构体数组元素然后输出需要信息。对于查询功能的实现同修改是先将所有文件内容读入到内存中然后查找到其中某项最后输出到屏幕。◎评分模块:系统根据总的应道考勤数按照百分制求出每个学生的分数并输出到屏幕。数据结构学生信息用结构体记录包括姓名(字符数组)、性别(字符型)、日期(年月日三个字符数组)、节次(整型)、出情况(整型)。函数原型声明voidmain()主函数voidrecord()录入数据函数voidamend()修改数据函数voidsearch()查询数据函数voidgoal()计算总评函数二、详细设计main()函数voidmain(){voidrecord()录入数据函数voidamend()修改数据函数voidsearch()查询数据函数voidgoal()计算总评函数charitemprintf("◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎n")printf("●●n")printf("◎学生考勤管理系统◎n")printf("●●n")printf("◎作者朱胜佳西安理工自◎n")printf("●●n")printf("◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎n")printf("●●n")printf("◎学生信息及考勤情况录入◎n")printf("●●n")printf("◎学生信息及考勤情况修改◎n")printf("●●n")printf("◎学生信息及考勤情况查询◎n")printf("◎◎n")printf("●学生考勤总评分数查询●n")printf("◎◎n")printf("●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●n")用户界面printf("n")printf("请选择您需要的操作n")scanf("c",item)switch(item){case'':record()breakcase'':amend()breakcase'':search()breakcase'':goal()break}实现功能选择}流程图:record()函数voidrecord(){inti,j=,jx=printf("************************学生基本信息录入*****************************n")if((fp=fopen("datetxt","w"))==){printf("文件打开失败n")exit()}for(i=jx==i)输入信息循环{for(j==)输入确认循环{getchar()printf("请输入第d个学生的姓名",i)gets(stuiname)printf("请输入第d个学生的学号",i)gets(stuinumber)printf("请输入第d个学生的性别(男:m女:f)",i)stuisex=getchar()printf("请输入第d个学生的生日(格式:年月日)",i)scanf("ddd",stuiyear,stuimonth,stuiday)printf("请输入第d个学生的当前考勤次数",i)scanf("d",stuikq)printf("您输入的信息为姓名s学号s性别c生日d年d月d日n重输确认",stuiname,stuinumber,stuisex,stuiyear,stuimonth,stuiday)scanf("d",j)输入确认}j=if(fwrite(stui,sizeof(structstudent),,fp)!=)printf("文件写入错误n")写入文件printf("是否继续输入下一个学生信息终止继续n")scanf("d",jx)继续输入选择}fclose(fp)printf("返回主菜单n")getchar()a=getchar()getchar()if(a=='')main()返回主菜单}流程图:Yamend()函数voidamend(){inti=,j=,sway,t,xcharname,numberprintf("**********************学生考勤修改**************************n")if((fp=fopen("datetxt","r"))==)将文件内容读入内存{printf("文件打开失败n")exit()}for(i=feof(fp)==i)fread(stui,sizeof(structstudent),,fp)读取文件内容fclose(fp)关闭文件printf("选择查找方式按照姓名查找按照学号查找")scanf("d",sway)**********************按照姓名查找开始*************************if(sway==){printf("请输入需要修改学生的姓名")printf("i=d",i)scanf("s",name)for(j=t!=j){t=strcmp(stujname,name)if(j==i){t=printf("未找到您所查询的数据,请重新输入n")}}if(j<i)查询成功{printf("您查找的学生信息如下n姓名s学号s性别c生日d年d月d日当前考勤次数dn",stujname,stujnumber,stujsex,stujyear,stujmonth,stujday,stujkq)printf("是否修改该生考勤信息否是")选择是否修改考勤scanf("d",x)输入选择变量值if(x==){printf("请输入新的考勤值")scanf("d",stujkq)输入新的考勤值if((fp=fopen("datetxt","w"))==)以只写方式打开文件{printf("文件打开失败n")exit()}for(j=j<ij)if(fwrite(stuj,sizeof(structstudent),,fp)!=)printf("文件写入错误n")写入文件fclose(fp)关闭文件}}printf("是否继续修改其他学生考勤否是")scanf("d",x)if(x==)amend()}**********************按照姓名查找结束***********************************************按照学号查找开始*************************if(sway==){printf("请输入需要修改学生的学号")printf("i=d",i)scanf("s",number)for(j=t!=j){t=strcmp(stujnumber,number)if(j==i){t=printf("未找到您所查询的数据,请重新输入n")}}if(j<i)查询成功{printf("您查找的学生信息如下n姓名s学号s性别c生日d年d月d日当前考勤次数dn",stujname,stujnumber,stujsex,stujyear,stujmonth,stujday,stujkq)printf("是否修改该生考勤信息否是")选择是否修改考勤scanf("d",x)输入选择变量值if(x==){printf("请输入新的考勤值")scanf("d",stujkq)输入新的考勤值if((fp=fopen("datetxt","w"))==)以只写方式打开文件{printf("文件打开失败n")exit()}for(j=j<ij)if(fwrite(stuj,sizeof(structstudent),,fp)!=)printf("文件写入错误n")写入文件fclose(fp)关闭文件}}printf("是否继续修改其他学生考勤否是")scanf("d",x)if(x==)amend()}**********************按照学号查找结束*************************printf("返回主菜单n")getchar()a=getchar()getchar()if(a=='')main()}search()函数voidsearch(){inti=,j=,sway,t,xcharname,numberprintf("***********************学生信息查询***************************n")if((fp=fopen("datetxt","r"))==)将文件内容读入内存{printf("文件打开失败n")exit()}for(i=feof(fp)==i)fread(stui,sizeof(structstudent),,fp)读取文件内容fclose(fp)关闭文件printf("选择查找方式按照姓名查找按照学号查找")scanf("d",sway)**********************按照姓名查找开始*************************if(sway==){printf("请输入需要修改学生的姓名")printf("i=d",i)scanf("s",name)for(j=t!=j){t=strcmp(stujname,name)if(j==i){t=printf("未找到您所查询的数据,请重新输入n")}}if(j<i)查询成功{printf("您查找的学生信息如下n姓名s学号s性别c生日d年d月d日当前考勤次数dn",stujname,stujnumber,stujsex,stujyear,stujmonth,stujday,stujkq)}printf("是否继续查询其他学生信息否是")scanf("d",x)if(x==)search()}**********************按照姓名查找结束***********************************************按照学号查找开始*************************if(sway==){printf("请输入需要修改学生的学号")printf("i=d",i)scanf("s",number)for(j=t!=j){t=strcmp(stujnumber,number)if(j==i){t=printf("未找到您所查询的数据,请重新输入n")}}if(j<i)查询成功{printf("您查找的学生信息如下n姓名s学号s性别c生日d年d月d日当前考勤次数dn",stujname,stujnumber,stujsex,stujyear,stujmonth,stujday,stujkq)}printf("是否继续查询其他学生信息否是")scanf("d",x)if(x==)search()}**********************按照学号查找结束*************************printf("返回主菜单n")getchar()a=getchar()getchar()if(a=='')main()}流程图:goal()函数voidgoal(){inti=,j=,sway,t,xfloatscorecharname,numberprintf("***********************学生考勤分数计算**************************n")if(kqcs==){printf("请输入应到考勤总数")请输入应到考勤总数scanf("f",kqcs)}if((fp=fopen("datetxt","r"))==)将文件内容读入内存{printf("文件打开失败n")exit()}for(i=feof(fp)==i)fread(stui,sizeof(structstudent),,fp)读取文件内容fclose(fp)关闭文件printf("选择查找方式按照姓名查找按照学号查找")scanf("d",sway)**********************按照姓名查找开始*************************if(sway==){printf("请输入需要修改学生的姓名")printf("i=d",i)scanf("s",name)for(j=t!=j){t=strcmp(stujname,name)if(j==i){t=printf("未找到您所查询的数据,请重新输入n")}}if(j<i)查询成功{printf("您查找的学生信息如下n姓名s学号s性别c生日d年d月d日当前考勤次数dn",stujname,stujnumber,stujsex,stujyear,stujmonth,stujday,stujkq)score=(stujkq)kqcs*printf("该生当前考勤分数为f",score)}printf("是否继续计算其他学生考勤分数否是")scanf("d",x)if(x==)goal()}**********************按照姓名查找结束***********************************************按照学号查找开始*************************if(sway==){printf("请输入需要修改学生的学号")printf("i=d",i)scanf("s",number)for(j=t!=j){t=strcmp(stujnumber,number)if(j==i){t=printf("未找到您所查询的数据,请重新输入n")}}if(j<i)查询成功{printf("您查找的学生信息如下n姓名s学号s性别c生日d年d月d日当前考勤次数dn",stujname,stujnumber,stujsex,stujyear,stujmonth,stujday,stujkq)score=(stujkq)kqcs*printf("该生当前考勤分数为f",score)}printf("是否继续计算其他学生考勤分数否是")scanf("d",x)if(x==)goal()}**********************按照学号查找结束*************************printf("返回主菜单n")getchar()a=getchar()getchar()if(a=='')main()}流程图:三、测试及调试(测试方案、存在的问题及解决方法)测试方案:按照每个函数功能进行测试在做完每个函数对其进行测试主函数测试先将所有需要的功能模块函数设置为空每个函数用一个printf语句来测试主函数。​ 存在问题:开始将生日定义为字符数组当用scanf来输入年月日时年月日之间用空格分隔但在输出时发现年月日出现错误。分析原因:用scanf输入年月日时系统会把用来分隔的空格当做字符读入。解决方法:将年月日定义为整型这样就可以用scanf输入用空格隔开。​ 存在问题:在查找数据时需要先将所有数据读入一个结构体数组在读取后未关闭文件执行查找时查找不到相关信息。分析原因:再利用for循环读取全部文件内容后文件指针将会移至文件末尾这样再执行查找时就会从文件末尾开始显然不符合要求所以会出现错误。解决方法:在读取完数据后先关闭文件在查找时再次打开文件这时文件指针就会指向文件开头。​ 存在问题:再多个使用getchar或者gets输入的时候会出现直接跳过输入的情况。分析原因:在使用getchar或者gets输入的时候系统会将前一步用来确认执行的回车当成字符读入导致跳过该步输入。解决方法:再getchar或者gets前面加上getchar()语句读掉回车下面的getchar或者gets就可以正常输入。四、小结通过编写该程序熟悉了C语言的基本语法选择循环等结构深入练习了函数的调用方法和文件的读写方法熟悉了结构体的使用更加深化了面向过程语言思想和一些基本算法。通过对程序的后期调试熟悉了C常见错误锻炼了思维的严密性和完备性。通过对程序的注释和画流程图形成了一套自己编程的风格和清晰地思路使思维更加条理化清晰化。附件:主要源程序代码(需打印)#include<stdioh>#include<stringh>#include<stdlibh>FILE*fp定义文件chara返回选择变量floatkqcs=应到考勤次数变量structstudent{charnamecharnumbercharsexintyearintmonthintdayintkq}stu定义储存学生信息的结构体数组********************************************主函数开始************************************************voidmain(){voidrecord()录入数据函数voidamend()修改数据函数voidsearch()查询数据函数voidgoal()计算总评函数charitemprintf("◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎n")printf("●●n")printf("◎学生考勤管理系统◎n")printf("●●n")printf("◎作者朱胜佳西安理工自◎n")printf("●●n")printf("◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎n")printf("●●n")printf("◎学生信息及考勤情况录入◎n")printf("●●n")printf("◎学生信息及考勤情况修改◎n")printf("●●n")printf("◎学生信息及考勤情况查询◎n")printf("◎◎n")printf("●学生考勤总评分数查询●n")printf("◎◎n")printf("●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●n")用户界面printf("n")printf("请选择您需要的操作n")scanf("c",item)switch(item){case'':record()breakcase'':amend()breakcase'':search()breakcase'':goal()break}实现功能选择}**************************************************主函数结束*******************************************************************************************录入数据函数内容开始***********************************************************voidrecord(){inti,j=,jx=printf("************************学生基本信息录入*****************************n")if((fp=fopen("datetxt","w"))==){printf("文件打开失败n")exit()}for(i=jx==i)输入信息循环{for(j==)输入确认循环{getchar()printf("请输入第d个学生的姓名",i)gets(stuiname)printf("请输入第d个学生的学号",i)gets(stuinumber)printf("请输入第d个学生的性别(男:m女:f)",i)stuisex=getchar()printf("请输入第d个学生的生日(格式:年月日)",i)scanf("ddd",stuiyear,stuimonth,stuiday)printf("请输入第d个学生的当前考勤次数",i)scanf("d",stuikq)printf("您输入的信息为姓名s学号s性别c生日d年d月d日n重输确认",stuiname,stuinumber,stuisex,stuiyear,stuimonth,stuiday)scanf("d",j)输入确认}j=if(fwrite(stui,sizeof(structstudent),,fp)!=)printf("文件写入错误n")写入文件printf("是否继续输入下一个学生信息终止继续n")scanf("d",jx)继续输入选择}fclose(fp)printf("返回主菜单n")getchar()a=getchar()getchar()if(a=='')main()返回主菜单}*****************************************录入数据函数内容结束****************************************************************************************************修改数据函数内容开始***********************************************************voidamend(){inti=,j=,sway,t,xcharname,numberprintf("**********************学生考勤修改**************************n")if((fp=fopen("datetxt","r"))==)将文件内容读入内存{printf("文件打开失败n")exit()}for(i=feof(fp)==i)fread(stui,sizeof(structstudent),,fp)读取文件内容fclose(fp)关闭文件printf("选择查找方式按照姓名查找按照学号查找")scanf("d",sway)**********************按照姓名查找开始*************************if(sway==){printf("请输入需要修改学生的姓名")printf("i=d",i)scanf("s",name)for(j=t!=j){t=strcmp(stujname,name)if(j==i){t=printf("未找到您所查询的数据,请重新输入n")}}if(j<i)查询成功{printf("您查找的学生信息如下n姓名s学号s性别c生日d年d月d日当前考勤次数dn",stujname,stujnumber,stujsex,stujyear,stujmonth,stujday,stujkq)printf("是否修改该生考勤信息否是")选择是否修改考勤scanf("d",x)输入选择变量值if(x==){printf("请输入新的考勤值")scanf("d",stujkq)输入新的考勤值if((fp=fopen("datetxt","w"))==)以只写方式打开文件{printf("文件打开失败n")exit()}for(j=j<ij)if(fwrite(stuj,sizeof(structstudent),,fp)!=)printf("文件写入错误n")写入文件fclose(fp)关闭文件}}printf("是否继续修改其他学生考勤否是")scanf("d",x)if(x==)amend()}**********************按照姓名查找结束***********************************************按照学号查找开始*************************if(sway==){printf("请输入需要修改学生的学号")printf("i=d",i)scanf("s",number)for(j=t!=j){t=strcmp(stujnumber,number)if(j==i){t=printf("未找到您所查询的数据,请重新输入n")}}if(j<i)查询成功{printf("您查找的学生信息如下n姓名s学号s性别c生日d年d月d日当前考勤次数dn",stujname,stujnumber,stujsex,stujyear,stujmonth,stujday,stujkq)printf("是否修改该生考勤信息否是")选择是否修改考勤scanf("d",x)输入选择变量值if(x==){printf("请输入新的考勤值")scanf("d",stujkq)输入新的考勤值if((fp=fopen("datetxt","w"))==)以只写方式打开文件{printf("文件打开失败n")exit()}for(j=j<ij)if(fwrite(stuj,sizeof(structstudent),,fp)!=)printf("文件写入错误n")写入文件fclose(fp)关闭文件}}printf("是否继续修改其他学生考勤否是")scanf("d",x)if(x==)amend()}**********************按照学号查找结束*************************printf("返回主菜单n")getchar()a=getchar()getchar()if(a=='')main()}*****************************************修改数据函数内容结束****************************************************************************************************查询数据函数内容开始***********************************************************voidsearch(){inti=,j=,sway,t,xcharname,numberprintf("***********************学生信息查询***************************n")if((fp=fopen("datetxt","r"))==)将文件内容读入内存{printf("文件打开失败n")exit()}for(i=feof(fp)==i)fread(stui,sizeof(structstudent),,fp)读取文件内容fclose(fp)关闭文件printf("选择查找方式按照姓名查找按照学号查找")scanf("d",sway)**********************按照姓名查找开始*************************if(sway==){printf("请输入需要修改学生的姓名")printf("i=d",i)scanf("s",name)for(j=t!=j){t=strcmp(stujname,name)if(j==i){t=printf("未找到您所查询的数据,请重新输入n")}}if(j<i)查询成功{printf("您查找的学生信息如下n姓名s学号s性别c生日d年d月d日当前考勤次数dn",stujname,stujnumber,stujsex,stujyear,stujmonth,stujday,stujkq)}printf("是否继续查询其他学生信息否是")scanf("d",x)if(x==)search()}**********************按照姓名查找结束***********************************************按照学号查找开始*************************if(sway==){printf("请输入需要修改学生的学号")printf("i=d",i)scanf("s",number)for(j=t!=j){t=strcmp(stujnumber,number)if(j==i){t=printf("未找到您所查询的数据,请重新输入n")}}if(j<i)查询成功{printf("您查找的学生信息如下n姓名s学号s性别c生日d年d月d日当前考勤次数dn",stujname,stujnumber,stujsex,stujyear,stujmonth,stujday,stujkq)}printf("是否继续查询其他学生信息否是")scanf("d",x)if(x==)search()}**********************按照学号查找结束*************************printf("返回主菜单n")getchar()a=getchar()getchar()if(a=='')main()}*****************************************查询数据函数内容结束****************************************************************************************************计算考勤分数函数内容开始***********************************************************voidgoal(){inti=,j=,sway,t,xfloatscorecharname,numberprintf("***********************学生考勤分数计算**************************n")if(kqcs==){printf("请输入应到考勤总数")请输入应到考勤总数scanf("f",kqcs)}if((fp=fopen("datetxt","r"))==)将文件内容读入内存{printf("文件打开失败n")exit()}for(i=feof(fp)==i)fread(stui,sizeof(structstudent),,fp)读取文件内容fclose(fp)关闭文件printf("选择查找方式按照姓名查找按照学号查找")scanf("d",sway)**********************按照姓名查找开始*************************if(sway==){printf("请输入需要修改学生的姓名")printf("i=d",i)scanf("s",name)for(j=t!=j){t=strcmp(stujname,name)if(j==i){t=printf("未找到您所查询的数据,请重新输入n")}}if(j<i)查询成功{printf("您查找的学生信息如下n姓名s学号s性别c生日d年d月d日当前考勤次数dn",stujname,stujnumber,stujsex,stujyear,stujmonth,stujday,stujkq)score=(stujkq)kqcs*printf("该生当前考勤分数为f",score)}printf("是否继续计算其他学生考勤分数否是")scanf("d",x)if(x==)goal()}**********************按照姓名查找结束***********************************************按照学号查找开始*************************if(sway==){printf("请输入需要修改学生的学号")printf("i=d",i)scanf("s",number)for(j=t!=j){t=strcmp(stujnumber,number)if(j==i){t=printf("未找到您所查询的数据,请重新输入n")}}if(j<i)查询成功{printf("您查找的学生信息如下n姓名s学号s性别c生日d年d月d日当前考勤次数dn",stujname,stujnumber,stujsex,stujyear,stujmonth,stujday,stujkq)score=(stujkq)kqcs*printf("该生当前考勤分数为f",score)}printf("是否继续计算其他学生考勤分数否是")scanf("d",x)if(x==)goal()}**********************按照学号查找结束*************************printf("返回主菜单n")getchar()a=getchar()getchar()if(a=='')main()}*****************************************计算考勤分数函数内容结束**********************************************

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/32

C语言课程设计总结报告

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利