C语言课程设计学生考勤系统.docx

上传人:b****6 文档编号:12806686 上传时间:2023-06-08 格式:DOCX 页数:37 大小:101.96KB
下载 相关 举报
C语言课程设计学生考勤系统.docx_第1页
第1页 / 共37页
C语言课程设计学生考勤系统.docx_第2页
第2页 / 共37页
C语言课程设计学生考勤系统.docx_第3页
第3页 / 共37页
C语言课程设计学生考勤系统.docx_第4页
第4页 / 共37页
C语言课程设计学生考勤系统.docx_第5页
第5页 / 共37页
C语言课程设计学生考勤系统.docx_第6页
第6页 / 共37页
C语言课程设计学生考勤系统.docx_第7页
第7页 / 共37页
C语言课程设计学生考勤系统.docx_第8页
第8页 / 共37页
C语言课程设计学生考勤系统.docx_第9页
第9页 / 共37页
C语言课程设计学生考勤系统.docx_第10页
第10页 / 共37页
C语言课程设计学生考勤系统.docx_第11页
第11页 / 共37页
C语言课程设计学生考勤系统.docx_第12页
第12页 / 共37页
C语言课程设计学生考勤系统.docx_第13页
第13页 / 共37页
C语言课程设计学生考勤系统.docx_第14页
第14页 / 共37页
C语言课程设计学生考勤系统.docx_第15页
第15页 / 共37页
C语言课程设计学生考勤系统.docx_第16页
第16页 / 共37页
C语言课程设计学生考勤系统.docx_第17页
第17页 / 共37页
C语言课程设计学生考勤系统.docx_第18页
第18页 / 共37页
C语言课程设计学生考勤系统.docx_第19页
第19页 / 共37页
C语言课程设计学生考勤系统.docx_第20页
第20页 / 共37页
亲,该文档总共37页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C语言课程设计学生考勤系统.docx

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

C语言课程设计学生考勤系统.docx

C语言课程设计学生考勤系统

C语言程序设计

课程设计报告

设计题目:

学生考勤系统设计

 

专业微电子科学与工程

班级微电131

学生怡

指导教师

年学期

 

设计任务:

C语言课程设计任务书10

题目:

学生考勤系统设计

功能:

学生考勤系统应包含各班学生的全部信息。

每个学生是一条记录,包括、性别、学号、日期、节次、出勤情况等信息。

本系统可以模拟考勤过程、记录考勤结果,并能在课程结束后按照设定的考勤评分标准自动给出每个学生的考勤分数。

要求:

1、用C语言实现程序设计;

2、利用结构体进行相关信息处理;

3、系统的各个功能模块要求用函数的形式实现;

4、界面友好(良好的人机交互),程序加必要的注释。

 

平时成绩:

验收答辩成绩:

设计报告成绩:

总评成绩:

指导教师:

一、总体设计

1.程序的总体设计

◎确定界面,使用户可选择操作项目(录入,修改,查询,评分)。

◎录入功能:

使用结构体,要求用户输入、性别、学号、日期、节次、当前出勤情况等信息,并写入文件。

◎修改功能:

使用户输入学号,其中一项可以修改考勤其信息。

对于修改功能的实现,是先将所有文件容读入到存中,然后修改考勤值,最后再重新覆盖写入文件。

◎查询模块:

使用字符串比较函数,利用循环找到对应结构体数组元素,然后输出需要信息。

对于查询功能的实现,同修改,是先将所有文件容读入到存中,然后查找到其中某项,最后输出到屏幕。

◎评分模块:

系统根据总的应道考勤数按照百分制,求出每个学生的分数,并输出到屏幕。

2.数据结构

学生信息用结构体记录,包括(字符数组)、性别(字符型)、日期(年月日三个字符数组)、节次(整型)、出情况(整型)。

3.函数原型声明

voidmain()//主函数

voidinput();//录入数据函数

voidchange();//修改数据函数

voidsearch();//查询数据函数

voidevaluate();//计算总评函数

二、详细设计

1.main()函数

voidmain()

{

voidinput();//录入数据函数

voidchange();//修改数据函数

voidsearch();//查询数据函数

voidevaluate();//计算总评函数

charitem;

system("color34");

printf("★◇★□★◇★□★◇★□★◇★□★◇★□★\n");

printf("●●\n");

printf("◇学生考勤管理系统◇\n");

printf("●●\n");

printf("◇BY朱胜佳◇\n");

printf("●●\n");

printf("★◇★□★◇★□★◇★□★◇★□★◇★□★\n");

printf("●●\n");

printf("◇1.学生信息及考勤情况录入◇\n");

printf("●●\n");

printf("◇2.学生信息及考勤情况修改◇\n");

printf("●●\n");

printf("◇3.学生信息及考勤情况查询◇\n");

printf("◎◎\n");

printf("●4.学生考勤总评分数查询●\n");

printf("◇◇\n");

printf("★◇★□★◇★□★◇★□★◇★□★◇★□★\n");//用户界面

printf("\n");

printf("请选择您需要的操作\n");

scanf("%c",&item);

switch(item)

{

case'1':

input();break;

case'2':

change();break;

case'3':

search();break;

case'4':

evaluate();break;

}//实现功能选择

}

流程图:

2.input()函数

voidinput()

{

inti,j=0,jx=1;

printf("************************学生基本信息录入*****************************\n");

if((fp=fopen("date.txt","w"))==NULL)

{

printf("文件打开失败\n");

exit(0);

}

for(i=0;jx==1;i++)//输入信息循环

{for(;j==0;)//输入确认循环

{

getchar();

printf("请输入第%d个学生的",i+1);

gets(stu[i].name);

printf("请输入第%d个学生的学号",i+1);

gets(stu[i].number);

printf("请输入第%d个学生的性别(男:

m女:

f)",i+1);

stu[i].sex=getchar();

printf("请输入第%d个学生的生日(格式:

年月日)",i+1);

scanf("%d%d%d",&stu[i].year,&stu[i].month,&stu[i].day);

printf("请输入第%d个学生的当前考勤次数",i+1);

scanf("%d",&stu[i].kq);

printf("您输入的信息为%s学号%s性别%c生日%d年%d月%d日\n0重输1确认",stu[i].name,stu[i].number,stu[i].sex,stu[i].year,stu[i].month,stu[i].day);

scanf("%d",&j);//输入确认

}

j=0;

if(fwrite(&stu[i],sizeof(structstudent),1,fp)!

=1)printf("文件写入错误\n");//写入文件

printf("是否继续输入下一个学生信息0终止1继续\n");

scanf("%d",&jx);//继续输入选择

}

fclose(fp);

printf("0返回主菜单\n");

getchar();

a=getchar();

getchar();

if(a=='0')main();//返回主菜单

}

流程图:

 

打开文件

0=>j

0=>i

jx=1?

1=>jx

输入i+1个学生信息生信息

输入jx值选择是否继续

j=0?

输入j值选择是否确认

N

Y

i+1=>i

写入文件

结束

开始

 

Y

 

3.change()函数

voidchange()

{inti=0,j=0,sway,t,x;

charname[10],number[10];

printf("**********************学生考勤修改**************************\n");

if((fp=fopen("date.txt","r"))==NULL)//将文件容读入存

{

printf("文件打开失败\n");

exit(0);

}

for(i=0;feof(fp)==0;i++)fread(&stu[i],sizeof(structstudent),1,fp);//读取文件容

fclose(fp);//关闭文件

printf("选择查找方式1按照查找2按照学号查找");

scanf("%d",&sway);

/**********************按照查找开始*************************///

if(sway==1)

{

printf("请输入需要修改学生的");

//printf("i=%d",i);

scanf("%s",name);

for(j=0;t!

=0;j++)

{

t=strcmp(stu[j].name,name);

if(j==i)

{

t=0;

printf("未找到您所查询的数据,请重新输入\n");

}

}

if(j

{

printf("您查找的学生信息如下\n%s学号%s性别%c生日%d年%d月%d日当前考勤次数%d\n",stu[j-1].name,stu[j-1].number,stu[j-1].sex,stu[j-1].year,stu[j-1].month,stu[j-1].day,stu[j-1].kq);

printf("是否修改该生考勤信息0否1是");//选择是否修改考勤

scanf("%d",&x);//输入选择变量值

if(x==1)

{

printf("请输入新的考勤值");

scanf("%d",&stu[j-1].kq);//输入新的考勤值

if((fp=fopen("date.txt","w"))==NULL)//以只写方式打开文件

{

printf("文件打开失败\n");

exit(0);

}

for(j=0;j

=1)printf("文件写入错误\n");//写入文件

fclose(fp);//关闭文件

}

}

printf("是否继续修改其他学生考勤0否1是");

scanf("%d",&x);

if(x==1)change();

}

/**********************按照查找结束*************************///

/**********************按照学号查找开始*************************///

if(sway==2)

{

printf("请输入需要修改学生的学号");

//printf("i=%d",i);

scanf("%s",number);

for(j=0;t!

=0;j++)

{

t=strcmp(stu[j].number,number);

if(j==i)

{

t=0;

printf("未找到您所查询的数据,请重新输入\n");

}

}

if(j

{

printf("您查找的学生信息如下\n%s学号%s性别%c生日%d年%d月%d日当前考勤次数%d\n",stu[j-1].name,stu[j-1].number,stu[j-1].sex,stu[j-1].year,stu[j-1].month,stu[j-1].day,stu[j-1].kq);

printf("是否修改该生考勤信息0否1是");//选择是否修改考勤

scanf("%d",&x);//输入选择变量值

if(x==1)

{

printf("请输入新的考勤值");

scanf("%d",&stu[j-1].kq);//输入新的考勤值

if((fp=fopen("date.txt","w"))==NULL)//以只写方式打开文件

{

printf("文件打开失败\n");

exit(0);

}

for(j=0;j

=1)printf("文件写入错误\n");//写入文件

fclose(fp);//关闭文件

}

}

printf("是否继续修改其他学生考勤0否1是");

scanf("%d",&x);

if(x==1)change();

}

/**********************按照学号查找结束*************************///

printf("0返回主菜单\n");

getchar();

a=getchar();

getchar();

if(a=='0')main();

}

 

 

输入新的考勤值

写入文件

结束

 

4.search()函数

voidsearch()

{inti=0,j=0,sway,t,x;

charname[10],number[10];

printf("***********************学生信息查询***************************\n");

if((fp=fopen("date.txt","r"))==NULL)//将文件容读入存

{

printf("文件打开失败\n");

exit(0);

}

for(i=0;feof(fp)==0;i++)fread(&stu[i],sizeof(structstudent),1,fp);//读取文件容

fclose(fp);//关闭文件

printf("选择查找方式1按照查找2按照学号查找");

scanf("%d",&sway);

/**********************按照查找开始*************************///

if(sway==1)

{

printf("请输入需要修改学生的");

//printf("i=%d",i);

scanf("%s",name);

for(j=0;t!

=0;j++)

{

t=strcmp(stu[j].name,name);

if(j==i)

{

t=0;

printf("未找到您所查询的数据,请重新输入\n");

}

}

if(j

{

printf("您查找的学生信息如下\n%s学号%s性别%c生日%d年%d月%d日当前考勤次数%d\n",stu[j-1].name,stu[j-1].number,stu[j-1].sex,stu[j-1].year,stu[j-1].month,stu[j-1].day,stu[j-1].kq);

}

printf("是否继续查询其他学生信息0否1是");

scanf("%d",&x);

if(x==1)search();

}

/**********************按照查找结束*************************///

/**********************按照学号查找开始*************************///

if(sway==2)

{

printf("请输入需要修改学生的学号");

//printf("i=%d",i);

scanf("%s",number);

for(j=0;t!

=0;j++)

{

t=strcmp(stu[j].number,number);

if(j==i)

{

t=0;

printf("未找到您所查询的数据,请重新输入\n");

}

}

if(j

{

printf("您查找的学生信息如下\n%s学号%s性别%c生日%d年%d月%d日当前考勤次数%d\n",stu[j-1].name,stu[j-1].number,stu[j-1].sex,stu[j-1].year,stu[j-1].month,stu[j-1].day,stu[j-1].kq);

}

printf("是否继续查询其他学生信息0否1是");

scanf("%d",&x);

if(x==1)search();

}

/**********************按照学号查找结束*************************///

printf("0返回主菜单\n");

getchar();

a=getchar();

getchar();

if(a=='0')main();

}

流程图:

打开文件

输入sway值选择查找方式

Sway=1?

将文件内容全部读入结构体数组

开始

 

Y

N

Sway=2?

输入要查找的姓名

输入要查找的学号

查找姓名

查找学号

输出该生信息

 

5.evaluate()函数

voidevaluate()

{inti=0,j=0,sway,t,x;

floatscore;

charname[10],number[10];

printf("***********************学生考勤分数计算**************************\n");

if(kqcs==0)

{

printf("请输入应到考勤总数");//请输入应到考勤总数

scanf("%f",&kqcs);

}

if((fp=fopen("date.txt","r"))==NULL)//将文件容读入存

{

printf("文件打开失败\n");

exit(0);

}

for(i=0;feof(fp)==0;i++)fread(&stu[i],sizeof(structstudent),1,fp);//读取文件容

fclose(fp);//关闭文件

printf("选择查找方式1按照查找2按照学号查找");

scanf("%d",&sway);

/**********************按照查找开始*************************///

if(sway==1)

{

printf("请输入需要修改学生的");

//printf("i=%d",i);

scanf("%s",name);

for(j=0;t!

=0;j++)

{

t=strcmp(stu[j].name,name);

if(j==i)

{

t=0;

printf("未找到您所查询的数据,请重新输入\n");

}

}

if(j

{

printf("您查找的学生信息如下\n%s学号%s性别%c生日%d年%d月%d日当前考勤次数%d\n",stu[j-1].name,stu[j-1].number,stu[j-1].sex,stu[j-1].year,stu[j-1].month,stu[j-1].day,stu[j-1].kq);

score=(stu[j-1].kq)/kqcs*100;

printf("该生当前考勤分数为%5.2f",score);

}

printf("是否继续计算其他学生考勤分数0否1是");

scanf("%d",&x);

if(x==1)evaluate();

}

/**********************按照查找结束*************************///

/**********************按照学号查找开始*************************///

if(sway==2)

{

printf("请输入需要修改学生的学号");

//printf("i=%d",i);

scanf("%s",number);

for(j=0;t!

=0;j++)

{

t=strcmp(stu[j].number,number);

if(j==i)

{

t=0;

printf("未找到您所查询的数据,请重新输入\n");

}

}

if(j

{

printf("您查找的学生信息如下\n%s学号%s性别%c生日%d年%d月%d日当前考勤次数%d\n",stu[j-1].name,stu[j-1].number,stu[j-1].sex,stu[j-1].year,stu[j-1].month,stu[j-1].day,stu[j-1].kq);

score=(stu[j-1].kq)/kqcs*100;

printf("该生当前考勤分数为%5.2f",score);

}

printf("是否继续计算其他学生考勤分数0否1是");

scanf("%d",&x);

if(x==1)evaluate();

}

/**********************按照学号查找结束*************************///

printf("0返回主菜单\n");

getchar();

a=getchar();

getchar();

if(a=='0')main();

}

流程图:

开始

输入应到考勤次数kqcs值

打开文件

输入sway值选择查找方式

Sway=1?

Y

N

Sway=2?

输入要查找的姓名

将文件内容全部读入结构体数组

输入要查找的学号

查找姓名

查找学号

输出该生信息

计算考勤分数

 

输出考勤分数

结束

 

三、测试及调试(测试方案、存在的问题及解决方法)

测试方案:

按照每个函数功能进行测试,在做完每个函数对其进行测试,主函数测试,先将所有需要的功能模块函数设置为空,每个函数用一个printf语句来测试主函数。

1.存在问题:

开始将生日定义为字符数组,当用scanf来输入年月日时,年月日之间用空格分隔,但在输出时发现年月日出现错误。

分析原因:

用scanf输入年月日时,系统会把用来分隔的空格当做字符读入。

解决方法:

将年月日定义为整型,这样就可以用scanf输入,用空格隔开。

2.存在问题2:

在查找数据时,需要先将所有数据读入一个结构体数组,在读取后未关闭文件,执行查找时查找不到相关信息。

分析原因:

再利用for循环读取全部文件容后,文件指针将会移至文件末尾,这样再执行查找时就会从文件末尾开始,显然不符合要求,所以会出现错误。

解决方法:

在读取完数据后先关闭文件,在查找

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

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2