C课设学生考勤系统文档格式.docx
《C课设学生考勤系统文档格式.docx》由会员分享,可在线阅读,更多相关《C课设学生考勤系统文档格式.docx(33页珍藏版)》请在冰豆网上搜索。
流程图、主要源程序代码(需打印)、测试情况及调试中间问题与解决方案、小结等
平时成绩:
验收答辩成绩:
设计报告成绩:
总评成绩:
指导教师:
一、总体设计
1.程序的总体设计
◎确定界面,使用户可选择操作项目(录入,查询,修改,浏览)。
◎录入功能:
使用结构体,要求用户输入姓名、学号、性别、在场次数、缺席次数、迟到次数等信息,并写入文件。
◎修改功能:
使用户输入学号可以修改考勤其信息。
对于修改功能的实现,是先将所有文件内容读入到内存中,然后修改考勤值,最后再重新覆盖写入文件。
◎查询模块:
使用字符串比较函数,利用循环找到对应结构体数组元素,然后输出需要信息。
对于查询功能的实现,同修改,是先将所有文件内容读入到内存中,然后查找到其中某项,最后输出到屏幕。
◎评分模块:
系统根据在场次数,缺席次数,迟到次数,求出每个学生的分数,并输出到屏幕。
(分数=在场次数*5+迟到次数*3+缺席次数*0)
2.数据结构
学生信息用结构体记录,包括姓名、学号、性别、在场次数、缺席次数,迟到次数。
3.函数原型声明
intshowmeun//系统主菜单显示
intsubmeun//子菜单显示
voidsubmain//子系统
voidinputinfo//输入学生个人信息
voidaboutinfo//查询个人信息
voidModifyByNumber//修改信息
voidallabout//查询所有信息
voidinsert_student//插入学生信息
voiddelete_student//删除学生信息
二、详细设计
1.main()函数
intshowmeun()
{
intin;
charch;
printf("
\n\n\n\n"
);
\t ╭────────────────────────────╮\n"
\t ∣学生个人考勤管理系统∣\n"
\t |--------------------------------------------------------∣\n"
\t | 1.学生个人考勤管理 |\n"
\t | |\n"
\t | 2. 退 出 系 统 |\n"
\t | |\n"
\t╰────────────────────────────╯\n"
\t请您正确选择:
"
while(scanf("
%d"
&
in)!
=1)
{
while((ch=getchar())!
='
\n'
)
putchar(ch);
returnin;
}
fflush(stdin);
returnin;
}
/**************************个人信息子菜单************************/
intsubmeun()
//charch;
system("
cls"
\n\n\n"
\t\t----------------------------------------------------\n"
\t\t| 学生个人考勤管理系统 |\n"
\t\t|--------------------------------------------------|\n"
\t\t| 1.录入个人考勤信息 |\n"
\t\t| |\n"
\t\t| 2.查询个人考勤信息 |\n"
\t\t| 3.修改个人考勤信息 |\n"
\t\t| 4.浏览所有考勤信息 |\n"
\t\t| |\n"
\t\t| 5.退出系统 |\n"
\t\t请您正确选择:
scanf("
in);
流程图:
结束
2.record()函数
voidrecord()
inti,j=0,jx=1;
************************学生基本信息录入*****************************\n"
if((fp=fopen("
date.txt"
"
w"
))==NULL)
printf("
文件打开失败\n"
exit(0);
for(i=0;
jx==1;
i++)//输入信息循环
{for(;
j==0;
)//输入确认循环
getchar();
请输入第%d个学生的姓名"
i+1);
gets(stu[i].name);
请输入第%d个学生的学号"
gets(stu[i].number);
请输入第%d个学生的性别(男:
m女:
f)"
stu[i].sex=getchar();
请输入第%d个学生的生日(格式:
年月日)"
scanf("
%d%d%d"
stu[i].year,&
stu[i].month,&
stu[i].day);
请输入第%d个学生的当前考勤次数"
stu[i].kq);
您输入的信息为姓名%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);
j);
//输入确认
j=0;
if(fwrite(&
stu[i],sizeof(structstudent),1,fp)!
=1)printf("
文件写入错误\n"
//写入文件
是否继续输入下一个学生信息0终止1继续\n"
jx);
//继续输入选择
fclose(fp);
0返回主菜单\n"
getchar();
a=getchar();
if(a=='
0'
)main();
//返回主菜单
打开文件
0=>
j
i
jx=1?
1=>
jx
输入i+1个学生信息生信息
j=0?
输入j值选择是否确认
N
Y
i+1=>
写入文件
开始
Y
输入jx值选择是否继续
3.amend()函数
voidamend()
{inti=0,j=0,sway,t,x;
charname[10],number[10];
**********************学生考勤修改**************************\n"
r"
))==NULL)//将文件内容读入内存
feof(fp)==0;
i++)fread(&
stu[i],sizeof(structstudent),1,fp);
//读取文件内容
//关闭文件
选择查找方式1按照姓名查找2按照学号查找"
sway);
/**********************按照姓名查找开始*************************///
if(sway==1)
请输入需要修改学生的姓名"
//printf("
i=%d"
i);
%s"
name);
for(j=0;
t!
=0;
j++)
{
t=strcmp(stu[j].name,name);
if(j==i)
{
t=0;
printf("
未找到您所查询的数据,请重新输入\n"
}
}
if(j<
i)//查询成功
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);
是否修改该生考勤信息0否1是"
//选择是否修改考勤
x);
//输入选择变量值
if(x==1)
请输入新的考勤值"
scanf("
stu[j-1].kq);
//输入新的考勤值
if((fp=fopen("
))==NULL)//以只写方式打开文件
{
}
for(j=0;
j<
i;
j++)if(fwrite(&
stu[j],sizeof(structstudent),1,fp)!
是否继续修改其他学生考勤0否1是"
if(x==1)amend();
/**********************按照姓名查找结束*************************///
/**********************按照学号查找开始*************************///
if(sway==2)
请输入需要修改学生的学号"
number);
t=strcmp(stu[j].number,number);
/**********************按照学号查找结束*************************///
输入新的考勤值
4.search()函数
voidsearch()
***********************学生信息查询***************************\n"
是否继续查询其他学生信息0否1是"
if(x==1)search();
/**********************按照姓名查找结束*************************///
流程图:
5.goal()函数
voidgoal()
floatscore;
***********************学生考勤分数计算**************************\n"
if(kqcs==0)
请输入应到考勤总数"
//请输入应到考勤总数
%f"
kqcs);
score=(stu[j-1].kq)/kqcs*100;
该生当前考勤分数为%5.2f"
score);
是否继续计算其他学生考勤分数0否1是"
if(x==1)goal();
score=(stu[j-1].kq)/kqcs*100;
该生当前考勤分