C语言课程设计学生考勤系统(共10页).doc
精选优质文档-倾情为你奉上设计任务:C语言课程设计任务书题目:学生考勤系统设计功能:学生考勤系统应包含各班学生的全部信息。每个学生是一条记录,包括姓名、性别、学号、出勤情况等。本系统可模拟考勤过程,记录考勤结果,并能够在课程结束后按照设定的考勤评分标准自动给出每个学生的考勤分数。分步实施:1、 初步完成总体设计,搭好框架,确定人机对话界面,确定函数个数;2、 建立一个文件,将每条记录信息写入文件中并能显示于屏幕上3、完成上述添加(出勤情况)、查找(学号,姓名,性别等)、修改等功能。4、进一步要求:自动给出每个学生的考勤分数要求:1、用C语言实现程序设计;2、利用结构体数组实现信息的数据结构设计;3、系统的各个功能模块要求用函数的形式实现;4、界面友好(良好的人机交互),程序加必要的注释。总评成绩:指导教师:附件:学生考勤系统主要源程序代码#include<stdio.h>#include<string.h> /*头文件。*/int SIZE; /*宏定义。*/int CLASS;struct student /*定义一个结构体数组,包含学生信息。*/ char name9; char sex4; int number; int count; int score; stu300;void main() /*主函数,选择界面。*/ void start(); 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("t请输入班级人数:n"); printf("#n"); scanf("%d",&SIZE); printf("n"); printf("#n"); printf("t请输入课程节数:n"); printf("#n"); scanf("%d",&CLASS); printf("n"); printf("n"); printf("n"); printf("n"); start();void start() /*主函数的辅助函数start函数。*/ char x; void found(); void search(); void add(); void mark(); printf("#n"); printf("# 请选择所需功能,输入对应数字: #n"); printf("# 1.建立学生列表 #n"); printf("# 2.查找学生信息 #n"); printf("# 3.模拟考勤过程 #n"); printf("# 4.计算考勤分数 #n"); printf("# 5.退出 #n"); printf("# #n"); printf("#n"); scanf("%S",&x); switch(x) /*利用switch函数实现子函数的选择功能。*/ case'1':found();break; case'2':search();break; case'3':add();break; case'4':mark();break;case'5':break; default :printf("*输入有误,请重输:n");start(); void found() /*第一个子函数found函数,用于建立学生列表。*/ int a; printf("#n"); printf(" 开始建表。n"); printf("#n"); FILE *fp; for(a=0;a<SIZE;a+) /*运用for循环,逐次输入学生信息。*/ printf("请输入第%d个学生的个人信息:n",a+1); printf("姓名:"); scanf("%s",stua.name); printf("性别:"); scanf("%s",stua.sex); printf("学号:"); scanf("%d",&stua.number); stua.count=0; stua.score=0; fp=fopen("stud","w"); /*新建一个文件,运用for函数将学生信息写入文件。*/ for(a=0;a<SIZE;a+) if(fwrite(&stua,sizeof(struct student),1,fp)!=1) printf("文件输入错误。n"); fclose(fp); printf("n"); printf("n"); printf("n"); printf("n"); printf("建表如下:n"); fp=fopen("stud","r"); /*读取新建的文件,并输出。*/ printf("姓名 t性别 t学号 t缺课数 t考勤分数 n"); printf("-n"); for(a=0;a<SIZE;a+) fread(&stua,sizeof(struct student),1,fp); printf("%s t%s t%d t%d t%dn",stua.name,stua.sex,stua.number,stua.count,stua.score); fclose(fp); printf("n"); printf("n"); printf("n"); printf("n"); printf("#n"); printf("# 记录完毕 #n"); printf("# 欢迎下次再来。 #n"); printf("#n"); start(); /*返回主函数的辅助函数,即主菜单。*/ void search() /*第二个子函数search函数,用于查询学生信息。*/ char b; void search1(); void search2(); printf("*n"); printf(" 请选择:n"); printf(" 1.按姓名查找。n"); printf(" 2.按学号查找。n"); printf("*n"); scanf("%s",&b); switch(b) /*运用switch函数,构成选择结构,可供选择查询类型。*/ case'1':search1();break; /*进入第1种查询类型的函数。*/ case'2':search2();break; /*进入第2种查询类型的函数。*/default :printf("*输入有误,请重输:");search(); printf("n"); printf("n"); printf("n"); printf("n"); printf("#n"); printf("# 查找完毕 #n"); printf("# 欢迎下次再来。 #n"); printf("#n"); start(); /*返回主函数的辅助函数,即主菜单。*/ void search1() /*第1种查询类型的函数。*/ int c; char student_name9; FILE *fp; /*打开已建立的文件并将其输出到屏幕上。*/ fp=fopen("stud","r"); printf("姓名 t性别 t学号 t缺课数 t考勤分数 n"); printf("-n"); for(c=0;c<SIZE;c+) fread(&stuc,sizeof(struct student),1,fp); printf("%s t%s t%d t%d t%dn",stuc.name,stuc.sex,stuc.number,stuc.count,stuc.score); fclose(fp); printf("n"); printf("n"); printf("n"); printf("n"); printf("请输入要查询学生姓名:"); scanf("%s",student_name); printf("n"); printf("n"); printf("n"); printf("n"); for(c=0;c<SIZE;c+) /*运用for循环和strcmp函数逐个比较输入的姓名与列表中学生的姓名,找到相同的后输出该学生的信息。*/ if(strcmp(student_name,stuc.name)=0) printf("已查到*n"); printf("姓名:%s 性别:%s 学号:%d 缺课数:%dn",stuc.name,stuc.sex,stuc.number,stuc.count); void search2() /*第2种查询类型的函数。*/ int c; int d; FILE *fp; fp=fopen("stud","r"); printf("姓名 t性别 t学号 t缺课数 t考勤分数 n"); printf("-n"); for(c=0;c<SIZE;c+) fread(&stuc,sizeof(struct student),1,fp); printf("%s t%s t%d t%d t%dn",stuc.name,stuc.sex,stuc.number,stuc.count,stuc.score); fclose(fp); printf("n"); printf("n"); printf("n"); printf("n"); printf("请输入要查询学生学号:"); scanf("%d",&d); printf("n"); printf("n"); printf("n"); printf("n"); for(c=0;c<SIZE;c+) /*同第1种查询类型的函数,用for循环逐个比较输入的学号与列表中学生的学号,找到相同的后输出该学生的信息。*/ if(d=stuc.number) printf("已查到*n"); printf("姓名:%s 性别:%s 学号:%d 缺课数:%dn",stuc.name,stuc.sex,stuc.number,stuc.count); void add() /*第三个子函数add函数,用于模拟考勤过程。*/ int e,f,y; struct name /*再建立一个叫name的结构体数组。*/ char nam9; na300; FILE *fp; fp=fopen("stud","r"); /*打开已建立的文件并将其输出到屏幕上。*/ for(e=0;e<SIZE;e+) fread(&stue,sizeof(struct student),1,fp); printf("%s t%s t%d t%d t%dn",stue.name,stue.sex,stue.number,stue.count,stue.score); fclose(fp); printf("n"); printf("n"); printf("n"); printf("n"); printf("*n"); printf(" 模拟考勤开始。n"); printf("*n"); for(e=0;e<CLASS;e+) /*运用for循环的嵌套,向name结构体中输入姓名,再依次与列表中的学生姓名逐个比较。*/ printf("请输入第%d节课未到的学生姓名并以“over”结束:",e+1); for(y=0;y<=SIZE;y+) scanf("%s",nay.nam); for(f=0;f<SIZE;f+) if(strcmp(nay.nam,stuf.name)=0) /*如果输入的姓名与某个学生姓名相同,在其count的信息中加1。*/ stuf.count+; if(strcmp(nay.nam,"over")=0) /*循环结束,遇到 "over",退出循环。*/ break; fp=fopen("stud","w"); /*将新的列表数据写入原文件中。*/ for(e=0;e<SIZE;e+) if(fwrite(&stue,sizeof(struct student),1,fp)!=1) printf("文件输入错误。n"); fclose(fp); printf("n"); printf("n"); printf("n"); printf("n"); printf("模拟考勤完毕,结果如下:n"); fp=fopen("stud","r"); /*打开更新的文件并将其输出到屏幕上。*/ printf("姓名 t性别 t学号 t缺课数 n"); printf("-n"); for(f=0;f<SIZE;f+) fread(&stuf,sizeof(struct student),1,fp); printf("%s t%s t%d t%dn",stuf.name,stuf.sex,stuf.number,stuf.count); fclose(fp); printf("n"); printf("n"); printf("n"); printf("n"); printf("#n"); printf("# 考勤完毕 #n"); printf("# 欢迎下次再来。 #n"); printf("#n"); start(); /*返回主函数的辅助函数。*/ void mark() /*第四个子函数mark函数,用于计算考勤分数。*/ int g; FILE *fp; /*打开更新的文件并将其输出到屏幕上。*/ fp=fopen("stud","r+"); printf("姓名 t性别 t学号 t缺课数n"); printf("-n"); for(g=0;g<SIZE;g+) fread(&stug,sizeof(struct student),1,fp); printf("%s t%s t%d t%dn",stug.name,stug.sex,stug.number,stug.count); printf("n"); printf("n"); printf("n"); printf("n"); printf("*n"); printf(" 评分开始。n"); printf("*n"); for(g=0;g<SIZE;g+) /*用for循环实现评分过程。*/ stug.score=(100-stug.count*5); /*缺一节课扣五分。*/ if(stug.score<0) stug.score=0; fclose(fp); fp=fopen("stud","w"); /*将更新的学生列表信息写入原文件中。*/ for(g=0;g<SIZE;g+) if(fwrite(&stug,sizeof(struct student),1,fp)!=1) printf("文件输入错误。n"); fclose(fp); printf("n"); printf("n"); printf("n"); printf("n"); printf("结果如下:n"); fp=fopen("stud","r"); /*打开更新的文件并将其输出到屏幕上。*/ printf("姓名 t性别 t学号 t缺课数 t考勤分数 n"); printf("-n"); for(g=0;g<SIZE;g+) fread(&stug,sizeof(struct student),1,fp); printf("%s t%s t%d t%d t%dn",stug.name,stug.sex,stug.number,stug.count,stug.score); fclose(fp); printf("n"); printf("n"); printf("n"); printf("n"); printf("#n"); printf("# 评分完毕 #n"); printf("# 欢迎下次再来。 #n"); printf("#n"); start(); /*返回主函数的辅助函数,即主菜单。*/ 专心-专注-专业