1.课程设计目的 |
C语言课程设计是计算机科学与技术专业重要的实践性教学环节之一,本次设计结合实际应用的要求,使课程设计既覆盖C语言程序设计的知识点,又接近工程实际需要。本次设计的目的是通过课程设计的综合训练,培养学生实际分析问题、解决问题的能力,以及编程和动手能力,最终目标是通过课程设计这种形式,帮助学生系统掌握C语言程序设计这门课程的主要内容,养成良好的编程习惯,更好的完成教学任务。 |
2.课程设计任务与要求: |
要求: 本次课程设计利用《C语言程序设计》课程中所学到的编程知识和编程技巧,完成具有一定难度和工作量的程序设计题目,帮助学生掌握编程、调试的基本技能,独立完成所布置的任务。 要求: 1、对系统进行功能需求分析 2、设计合理的数据结构和系统框架 3、编程简练,程序功能齐全,能正确运行 4、说明书、流程图要清楚 5、课题完成后必须按要求提交课程设计报告 任务: 以本班同学的具体数据为背景,设计一个本班考勤系统。 功能: 设计一考勤系统。考勤信息记录了学生的缺课情况,它包括:缺课日期、第几节课、课程名称、学生姓名、学生学号、缺课类型(迟到、早退、请假及旷课)。系统具有以下功能: 1、 录入学生的缺课记录; 2、 修改某个学生的缺课记录; 3、 查询某个学生的缺课情况; 4、 统计某段时间内,旷课学生姓名及旷课次数,按旷课次数由多到少排序; 5、 统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序;课程设计报告内容包括以下几个方面:(1)课题的总体设计和算法分析;(2)程序流程图、函数说明、文件说明;(3)源程序代码清单;(4)测试数据和测试过程记录;(5)遇到的问题及解决方案分析;(6)课程设计小结。 3.课程设计说明书
(3)详细设计:主要写各功能模块流程图、算法的设计、函数的设计、列出文件清单 一.系统分析 1.整体流程图 2.分块流程 (1)模块说明:录入学生的缺课情况:输入记录情况个数,录入缺课日期,录入第几节课,录入课程名称,录入学生姓名,录入学生学号,录入缺课类型。若记录一个缺课情况,则返回进入菜单。若记录多个缺课情况,继续录入缺课情况。 修改某个学生缺课记录模块:输入将要修改的学生姓名或学号。用1代表姓名,2代表学号。输入学生姓名或学号后确认是否修改。1修改,2不修改。修改内容:1代表修改日期,2代表修改课节,3代表课程名称,4代表缺课类型,然后数学正确信息修改。修改完成后进入菜单。 查询某个学生缺课情况模块:输入将要查询的学生姓名或学号。用1代表姓名,2代表学号。输入学生姓名或学号后将显示该学生的缺课情况。包括缺课日期、课节、课程名称、姓名、学号、缺课类型。查询完成后进入菜单。统计某段时间内旷课学生的姓名及旷课次数:系统根据输入的信息筛选此时间段内的学生考勤信息,再按照学生的旷课次数由大到小降序排列。统计完后返回菜单 统计某段时间内存在学生旷课的课程及旷课人次:系统根据输入的信息筛选此时间段内的学生考勤信息,再按照课程次数由大到小降序排列。统计完后返回菜单 退出系统模块:退出系统。 |
4.课程设计成果 程序源代码,运行结果(可用屏幕抓图的方法说明)(五号,宋体)(多页) #include"stdio.h" #include"stdlib.h" #include"string.h" struct Student { char name[20]; int count; }stu[100],temp; struct Allfunction { char date[50]; //缺课日期 int Classtime; //缺课时间 char ClassName[20]; //课程名称 char StudentName[20]; //学生姓名 int number; //学生学号 char Kind[10]; //缺课类型 }student[100]; struct lesson { char name[20]; int count; }lesson[20],temp1; int main() { void menu(); void input(void); //录入 void add(void); //再次录入 void change(void); //修改 void search(void); //查询 void Recordstuent(void); //统计某段时间内旷课学生姓名及旷课次数 void Recordclass(void); //统计某段时间内存在学生旷课的课程及旷课人次 int choose; while(1) { menu(); //打印菜单主界面 printf("\n**请选择功能序号:"); scanf("%d",&choose); switch(choose) { case 1:input();break; case 2:change();break; case 3:search();break; case 4:Recordstuent();break; case 5:Recordclass();break; case 6:add();break; case 7:printf("\n **welcome next coming!goodbye~**\n");break; default:printf("**wrong,please input again!**\n"); } system("pause"); } return 0; } void menu() { printf("********************************************\n"); printf("* 江 苏 海 洋 大 学 *\n"); printf("* 学 生 考 勤 信 息 管 理 系 统 *\n"); printf("* *\n"); printf("* 1-录入学生的缺课记录 *\n"); printf("* 2-修改某个学生的缺课记录 *\n"); printf("* 3-查询某个学生的缺课情况 *\n"); printf("* 4-统计学生旷课次数 *\n"); printf("* 5-统计课程旷课情况 *\n"); printf("* 6.信息添补 *\n"); printf("* 7-退出系统 *\n"); printf("********************************************\n"); } void input(void) { int i,Num,choose; FILE *fp1; char file1name[20]; printf("**请输入缺课的学生个数:"); scanf("%d",&Num); printf("**请输入想要录入的文件名:"); scanf("%s",file1name); printf("缺课日期\t第几节课\t课程名称\t学生姓名\t学生学号\t缺课类型\n"); for(i=0;i<Num;i++) { scanf("%s%d%s%s%d%s",student[i].date,&student[i].Classtime, student[i].ClassName,student[i].StudentName,&student[i].number,student[i].Kind); } if((fp1=fopen(file1name,"w"))==NULL) { printf("**cannot open the file!**\n"); exit(0); } for(i=0;i<Num;i++) { fprintf(fp1,"%s\t%d\t%s\t%s\t%d\t%s\n", student[i].date,student[i].Classtime,student[i].ClassName,student[i].StudentName, student[i].number,student[i].Kind); } printf("**ok!**\n",file1name); fclose(fp1); } void add(void) { FILE *fp; char filename[20]; int num,i; printf("**请输入想要读取的文件名:"); scanf("%s",filename); printf("**请输入你要添加缺课的学生个数:"); scanf("%d",&num); if((fp=fopen(filename,"a"))==NULL) { printf("**cannot open the file!**\n"); exit(0); } printf("缺课日期\t第几节课\t课程名称\t学生姓名\t学生学号\t缺课类型\n"); for(i=0;i<num;i++) { scanf("%s%d%s%s%d%s",student[i].date,&student[i].Classtime,student[i].ClassName, student[i].StudentName,&student[i].number,student[i].Kind); } for(i=0;i<num;i++) { fprintf(fp,"%s\t%d\t%s\t%s\t%d\t%s\n", student[i].date,student[i].Classtime,student[i].ClassName,student[i].StudentName, student[i].number,student[i].Kind); } printf("**ok!**\n",filename); fclose(fp); } void change()//修改数据 { int begin(int i); FILE *fp2; int Number,j,i=0; int choose; char file2name[20],file3name[20]; printf("**请输入想要读取的文件名:"); scanf("%s",file2name); if((fp2=fopen(file2name,"r"))==NULL) { printf("**cannot open the file!**\n"); exit(0); } while(!feof(fp2)) { fscanf(fp2,"%s%d%s%s%d%s",student[i].date,&student[i].Classtime, student[i].ClassName,student[i].StudentName, &student[i].number,student[i].Kind); i++; } begin(i); fclose(fp2); } int begin(int i) { int search_name(int i); int search_number(int i); int j,choose; j=i; printf("**按姓名请输入1**\n"); printf("**按学号请输入2**\n"); printf("**please choose:"); scanf("%d",&choose); switch(choose) { case 1:search_name(i);break; case 2:search_number(i);break; default:printf("**wrong,please input again!**\n"); begin(j);break; } } int search_name(int i)//按名字修改 { FILE *fp3; int j,choose,n=0,m=0; char name[20],file3name[20]; printf("**请输入您想要修改的学生的姓名:"); scanf("%s",name); for(j=0;j<i;j++) { if(strcmp(student[j].StudentName,name)==0) { ++n; printf("\t\t缺课日期\t第几节课\t课程名称\t学生姓名\t学生学号\t缺课类型\n"); printf("第%d条缺课记录:\t%s\t\t%d\t\t%s\t\t%s\t\t%d\t\t%s\n",n,student[j].date, student[j].Classtime,student[j].ClassName, student[j].StudentName,student[j].number,student[j].Kind); } } if(n==0) { printf("**wrong,please input again!**\n"); begin(i); } else { for(j=0;j<i;j++) { if(strcmp(student[j].StudentName,name)==0) { ++m; printf("**是否修改第%d条学生缺课记录?\n是请输入1,否请输入2**\n",m); printf("**please choose:"); scanf("%d",&choose); if(choose==1) { printf("**请重新录入该学生的缺课记录:**\n"); printf("缺课日期\t第几节课\t课程名称\t学生姓名\t学生学号\t缺课类型\n"); scanf("%s%d%s%s%d%s",student[j].date,&student[j].Classtime,student[j].ClassName, student[j].StudentName,&student[j].number,student[j].Kind); } if(choose==2) continue; } } printf("**请输入保存结果的文件名称:"); scanf("%s",file3name); if((fp3=fopen(file3name,"w"))==NULL) { printf("**cannot open the file**\n"); exit(0); } for(j=0;j<i-1;j++) { fprintf(fp3,"%s\t%d\t%s\t%s\t%d\t%s\n", student[j].date,student[j].Classtime,student[j].ClassName, student[j].StudentName,student[j].number,student[j].Kind); } printf("**ok!**\n",file3name); fclose(fp3); } } int search_number(int i)//按学号修改 { FILE *fp4; int Number,j,choose,n=0,m=0; char file3name[20]; printf("**请输入你想要修改的学生的学号:"); scanf("%d",&Number); for(j=0;j<i;j++) { if(student[j].number==Number) { ++n; printf("\t\t缺课日期\t第几节课\t课程名称\t学生姓名\t学生学号\t缺课类型\n"); printf("第%d条缺课记录:\t%s\t\t%d\t\t%s\t\t%s\t\t%d\t\t%s\n",n,student[j].date, student[j].Classtime,student[j].ClassName, student[j].StudentName,student[j].number,student[j].Kind); } } if(n==0) { printf("**wrong,please input again!**\n"); begin(i); } else { for(j=0;j<i;j++) { if(student[j].number==Number) { ++m; printf("**是否修改第%d条学生缺课记录?\n是请输入1 ,否请输入2 **\n",m); printf("**please choose:"); scanf("%d",&choose); if(choose==1) { printf("**请重新输入该学生的缺课记录:**\n"); printf("缺课日期\t第几节课\t课程名称\t学生姓名\t学生学号\t缺课类型\n"); scanf("%s%d%s%s%d%s",student[j].date,&student[j].Classtime,student[j].ClassName, student[j].StudentName,&student[j].number,student[j].Kind); } if(choose==2) continue; } } printf("**请输入要保存结果的文件名称:**\n"); scanf("%s",file3name); if((fp4=fopen(file3name,"w"))==NULL) { printf("**cannot open the file!**\n"); exit(0); } for(j=0;j<i-1;j++) { fprintf(fp4,"%s\t%d\t%s\t%s\t%d\t%s\n", student[j].date,student[j].Classtime,student[j].ClassName, student[j].StudentName,student[j].number,student[j].Kind); } printf("**ok!**\n",file3name); fclose(fp4); } } void search() { int start(int i); FILE *fp2; int Number,j,i=0; int choose; char file2name[20]; printf("**请输入您需要查询的文件名: "); scanf("%s",file2name); if((fp2=fopen(file2name,"r"))==NULL) { printf("**cannot open the file!**\n"); exit(0); } while(!feof(fp2)) { fscanf(fp2,"%s%d%s%s%d%s",student[i].date,&student[i].Classtime, student[i].ClassName,student[i].StudentName,&student[i].number,student[i].Kind); i++; } start(i); printf("\n\n**ok!**\n\n"); fclose(fp2); } int start(int i) { int lookfor_name(int i); int lookfor_number(int i); int j,choose; j=i; printf("**按姓名请输入1**\n"); printf("**按学号请输入2**\n"); printf("**please choose:"); scanf("%d",&choose); switch(choose) { case 1:lookfor_name(i);break; case 2:lookfor_number(i);break; default:printf("**wrong,please input again!**\n");start(j);break; } } int lookfor_name(int i) { int j,choose,n=0,m=0; char name[20]; printf("**请输入您想要查询的学生的姓名:"); scanf("%s",name); printf("**answer is below**\n"); printf("缺课日期\t第几节课\t课程名称\t学生姓名\t学生学号\t缺课类型\n"); for (j=0;j<i;j++) { if(strstr(student[j].StudentName,name)!=NULL) { printf("%s\t\t",student[j].date); printf("%d\t\t",student[j].Classtime); printf("%s\t\t",student[j].ClassName); printf("%s\t\t",student[j].StudentName); printf("%d\t\t",student[j].number); printf("%s\t\t\n",student[j].Kind); } } } int lookfor_number(int i) { int Number,j,choose,n=0,m=0; printf("**请输入您要查询的学生的学号: "); scanf("%d",&Number); printf("**answer is below**\n"); printf("缺课日期\t第几节课\t课程名称\t学生姓名\t学生学号\t缺课类型\n"); for(j=0;j<i;j++) if(student[j].number==Number) { ++n; printf("%s\t\t",student[j].date); printf("%d\t\t",student[j].Classtime); printf("%s\t\t",student[j].ClassName); printf("%s\t\t",student[j].StudentName); printf("%d\t\t",student[j].number); printf("%s\t\t\n",student[j].Kind); } if(n==0) { printf("**wrong,please input again!**\n"); start(i); } } void Recordstuent() { FILE *fp,*fp1; int i=0,j=0,m=0,n,k,max=0; int start,end; int flag; char filename[20],file2name[20]; printf("**请输入您所需统计的文件名:"); scanf("%s",filename); if((fp=fopen(filename,"r"))==NULL) { printf("**cannot open the file**\n"); exit(0); } while(!feof(fp)) { fscanf(fp,"%s%d%s%s%d%s",student[i].date,&student[i].Classtime,student[i].ClassName ,student[i].StudentName,&student[i].number,student[i].Kind); i++; } n=i; printf("**请输入起止课次:"); scanf("%d%d",&start,&end); for(i=0;i<n;i++) { flag=0; if(student[i].Classtime>=start&&student[i].Classtime<=end) { for(j=0;j<n;j++) { if(strcmp(stu[j].name,student[i].StudentName)==0) { flag=1; k=j; } } if(flag) { if(strcmp(student[i].Kind,"旷课")==0) stu[k].count++; } else { strcpy(stu[m].name,student[i].StudentName); if(strcmp(student[i].Kind,"旷课")==0) stu[m].count++; m++; } } } for(i=0;i<n-1;i++) { max=i; for(j=i+1;j<n;j++) if(stu[max].count<stu[j].count) max=j; temp=stu[i]; stu[i]=stu[max]; stu[max]=temp; } printf("**请输入保存统计结果的文件名:"); scanf("%s",file2name); if((fp1=fopen(file2name,"w"))==NULL) { printf("**cannot open the file**\n"); exit(0); } fp1=fopen(file2name,"w"); for(i=0;i<m;i++) { if(i==0) fprintf(fp1,"姓名:%s 旷课次数:%d次\n",stu[i].name,stu[i].count); else fprintf(fp1," %s %d次\n",stu[i].name,stu[i].count); } fclose(fp1); for(i=0;i<m;i++) { if(i==0) printf("姓名:%s 旷课次数:%d次\n",stu[i].name,stu[i].count); else printf(" %s %d次\n",stu[i].name,stu[i].count); } printf("**ok**\n",file2name); } void Recordclass(void) { FILE *fp,*fp1; int i=0,j=0,m=0,n,k,max=0; int start,end; int flag; char filename[20],file2name[20]; printf("请输入所需统计的文件名:"); scanf("%s",filename); if((fp=fopen(filename,"r"))==NULL) { printf("**cannot open the file**!\n"); exit(0); } while(!feof(fp)) { fscanf(fp,"%s%d%s%s%d%s",student[i].date,&student[i].Classtime, student[i].ClassName,student[i].StudentName,&student[i].number,student[i].Kind); i++; } n=i; printf("**请输入起止课次: "); scanf("%d%d",&start,&end); for(i=0;i<n;i++) { flag=0; if(student[i].Classtime>=start&&student[i].Classtime<=end) { for(j=0;j<n;j++) { if(strcmp(lesson[j].name,student[i].ClassName)==0) { flag=1; k=j; } } if(flag) { if(strcmp(student[i].Kind,"旷课")==0) lesson[k].count++; } else { strcpy(lesson[m].name,student[i].ClassName); if(strcmp(student[i].Kind,"旷课")==0) lesson[m].count++; m++; } } } for(i=0;i<n-1;i++) { max=i; for(j=i+1;j<n;j++) if(lesson[max].count<lesson[j].count) max=j; temp1=lesson[i]; lesson[i]=lesson[max]; lesson[max]=temp1; } printf("**请输入保存统计结果的文件名:"); scanf("%s",file2name); if((fp1=fopen(file2name,"w"))==NULL) { printf("**cannot open the file**!\n"); exit(0); } else fp1=fopen(file2name,"w"); for(i=0;i<m;i++) { if(i==0) fprintf(fp1,"课程名称:%s 旷课人数:%d人\n ",lesson[i].name,lesson[i].count); else fprintf(fp1," %s %d人\n",lesson[i].name,lesson[i].count); } fclose(fp1); for(i=0;i<m;i++) { if(i==0) printf("课程名称:%s 旷课人数:%d人\n",lesson[i].name,lesson[i].count); else printf(" %s %d人\n",lesson[i].name,lesson[i].count); } printf("**ok!**\n",file2name); } 源代码运行结果: |
5.课程设计心得 |
C语言程序设计——考勤管理系统
于 2024-06-24 17:56:27 首次发布