C课设报告:多功能上课点名系统 - 图文
更新时间:2024-05-02 14:09:01 阅读量: 综合文库 文档下载
- 多功能报告厅的功能推荐度:
- 相关推荐
C语言课程设计实习报告
C语言课程设计实习报告
专 业:地空学院 学 号: 88888888 班级序号: 666666 姓 名: 指导教师:
1
C语言课程设计实习报告
目录
一、C语言课程设计的目的 ..................................................................... 3 二.题目:自动点名系统 ........................................................................... 3 三、总体设计............................................................................................. 3 四 详细设计............................................................................................. 6 1 结构体及函数 .................................................................................. 6 2 主函数............................................................................................... 7 3 各函数设计 ...................................................................................... 9 五 上机操作......................................................................................... 24 学 习 心 得............................................................................................. 30 六、算法和系统的优缺点 ...................................................................... 31 七 :原代码(附录) ............................................................................ 31
2
C语言课程设计实习报告
C语言程序设计报告
(实习日期: 2013-12至2014-1)
一、C语言课程设计的目的
高级语言课程设计是学习完《高级语言程序设计》课程后进行的一次全面的综合性上机实验。其目的在于为同学提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼同学的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。
二.题目:自动点名系统
需求分析:设计一个供教师上课使用的自动点名系统,满足实际点名中的以下功能
1 计算机随机选取学生,进行点名。 2 可以记录学生是否到课。
3 查询历史记录,包括已经点过的学生记录和旷课的学生记录。 4 点名时有公平性,任意两个人被点次数差不超过一次(不包括有旷课记录的学生)。
5 对旷过课的学生单独点名。 6 清除历史记录。
7 系统功能清晰、使用方便。 8 用文件记录点名、旷课的数据。
三、总体设计
系统由6个模块组成:
3
C语言课程设计实习报告
点名 系统 连续点名模块多人点名模块 浏览历史模块 (printrecord) 点旷过课学生模块 (pickhistory) 清除模块 (clear) 退出模块 (exit) (pickc)(pickn) 连续点名模块:输入’c’(choose)点一个人,输入’e’(end)返回主菜单,每次点人后输入学生的到课情况(y/n)。
连续点名模块(pickc) 选出一个学生 是否到课?(y/n) 继续点名?(c/e)
多人点名模块:根据输入的要点名人数点名,同时记录到课情况,点完后返回主菜单
4
C语言课程设计实习报告
多人点名模块 (pickn) 输入点名人数 记录到课情况 返回主菜单
浏览历史模块:选择后显示历史记录(点名记录、到课记录)。
点旷课学生模块:额外点所有有旷到记录的学生,不计入总点名次数,但如果又旷到,则旷到次数加一。此次上课点名(此次运行程序)已经由前两个模块点到的,不会出现在这个模块。(即不会出现一个旷到学生被意外记两次的情况)
点旷过课学生模块 (pickhistory) 点名,记录到课情况 返回菜单
清除模块:清除历史记录。
退出模块:退出程序。
5
C语言课程设计实习报告
四 详细设计
1 结构体及函数
学生信息(姓名、学号)存在结构体Student中,各功能由函数实现。 #include
#include
typedef struct //存储学生信息 {
char num[9]; char name[7];
}Student;
void choose(Student *stu,int *a,int *b,int *c); //choose a student int minimum(int *a); //数组最小值函数
void function(Student *stu,int *a,int *b,int *c); //主菜单函数 void pickn(Student *stu,int *a,int *b,int *c); //选多个学生的函数 void pickc(Student *stu,int *a,int *b,int *c); //连续选学生的函数
6
C语言课程设计实习报告
void pickhistory(Student *stu,int *b,int *c); //点旷到学生的函数 void printrecord(Student *stu,int *a,int *b); //浏览历史函数
void read(Student *stu); //读取student.txt的函数 void saverecord(int *a,int *b); //存储历史记录到sturecord.dat的函数 void loadrecord(int *a,int *b); //读取文件 sturecord.dat的函数 void clear(int *a,int *b); //清除历史记录函数
void title(); //打印标题函数 void menu(); //打印目录函数 void borderup(); //打印上边界函数 void borderdown(); //打印下边界函数
2 主函数
主函数有读取学生信息、读取历史记录、显示菜单、点名、存储信息的功能,全部用函数实现。
int main() {
int a[N]={0},b[N]={0},c[N]={0}; // a,b,c数组分别存被点次数、 Student stu[N]; //旷课次数、本次上课是否被点
srand((unsigned)time(NULL));
7
C语言课程设计实习报告
read(stu); loadrecord(a,b);
title(); menu();
function(stu,a,b,c);
saverecord(a,b); return 0; }
开始 显示功能 判断 根据判断的值调用各功能模块函数 结束 8
C语言课程设计实习报告
3 各函数设计
(1) 存读数据函数
1 从student.txt读取学生信息的函数
void read(Student *stu) {
FILE *fp;
int i; //circulate
char c,d[5],e,*p; //\判断是否为名字的字符,\存名字后
的空格与回车,\存中间的空格
fp=fopen(\ //open file if(fp==NULL) {
printf(\
exit (0); }
for(i=0;i fgets(stu[i].num,9,fp); //学号 e=fgetc(fp); 9 C语言课程设计实习报告 } p=&stu[i].name; //名字 c='\\0'; } while(c!='\\t') { } c=fgetc(fp); if(c!='\\t') { } else { } *p='\\0'; fgets(d,5,fp); *p=c; p++; fclose(fp); 2 保存点名记录到sturecord.dat的函数 void saverecord(int *a,int *b) 10 C语言课程设计实习报告 { FILE *fp; if((fp=fopen(\ { printf(\ exit (0); } if(fwrite(a,sizeof(int),N,fp)!=N) printf(\ if(fwrite(b,sizeof(int),N,fp)!=N) printf(\ fclose(fp); } 3 从sturecord.dat读取点名记录的函数 void loadrecord(int *a,int *b) { FILE *fp; if((fp=fopen(\ { 11 //二进制方式存数据 C语言课程设计实习报告 } printf(\ saverecord(a,b); //如果 sturecord.data不存在则新建立一个 exit (0); if(fread(a,sizeof(int),N,fp)!=N) printf(\ if(fread(b,sizeof(int),N,fp)!=N) printf(\ fclose(fp);} (2)基本函数 1 数组最小值函数 求数组中的最小值,由choose函数调用,choose函数中的随机数r要满足a[r]=miminum(a)才使用。即每次只点被点过次数最少的学生。 int minimum(int *a) { int mi,i; mi=a[0]; for(i=0;i if(mi>a[i]) 12 C语言课程设计实习报告 } mi=a[i]; return (mi); } 2 点名函数 Choose函数可以用随机数r从stu[N]结构体中随机选择一个再输出相应学生信息,a[N]记录下被点学生(a[r]++;),之后可以用b[N]记录学生是否到课(y/n)。c[N]记录此次课(此次运行程序)的点名,不保存到sturecord.dat,用于防止此次上课点名已经由随机点名模块(pickn,pickc)点到的,不会出现在旷到学生点名模块(pickhistory)。将在pickc、pickn函数中调用。 void choose(Student *stu,int *a,int *b,int *c) { do { } r=rand()%N; //r为0到N-1的随机数 int r; char yon,e; //’yon’ yes or no ,’e’接收回车 while(a[r]!=minimum(a)); 13 a[r]++; //记录下被点学生 c[r]++; C语言课程设计实习报告 printf(\ %s\\n\printf(\ %s\\n\ printf(\ Enter 'y' or 'n' to record attendance:[ ]\\b\\b\yon=getchar(); e=getchar(); //接收回车 putchar('\\n'); if(yon=='n') { b[r]++; //记录旷到 printf(\ ****************************\\n\ printf(\ the absence has been saved.\\n\ } printf(\ ****************************\\n\\n\ } (3)功能模块 1 连续点名函数 输入’c’ 点名,直到输入’e’时结束 void pickc(Student *stu,int *a,int *b,int *c) //参数在调用chooses时使用 { char coe='c',e; //’coe’控制点名或是结束,'e' 接收回车 borderup(); //打印边界,每个功能函数开始结尾都有 14 C语言课程设计实习报告 //使程序运行时显得清晰 while(coe=='c') { printf(\ Enter 'c' to choose,enter 'e' to end:[ ]\\b\\b\coe=getchar(); e=getchar(); if(coe=='c') { putchar('\\n'); choose(stu,a,b,c); } } } 2 点n人函数 输入要点的人数点名 borderdown(); void pickn(Student *stu,int *a,int *b,int *c) { int n,i,e; borderup(); 15 C语言课程设计实习报告 borderdown(); } 3 浏览历史模块 显示被点情况、旷到情况 printf(\ How many students do you want to check? [ ]\\b\\b\scanf(\e=getchar(); printf(\ for(i=0;i choose(stu,a,b,c); void printrecord(Student *stu,int *a,int *b) { int i; borderup(); printf(\name number of being picked number of absence number\\n\ for(i=0;i printf(\ %d %d %s\\n\ 16 C语言课程设计实习报告 } borderdown(); } 4 点旷到学生模块 点所有有旷到记录的学生,完成显示’finish’。因为不随机,不调用choose。 void pickhistory(Student *stu,int *b,int *c) { int i,yon,e; borderup(); for(i=0;i if(b[i]!=0 && c[i]==0) //有旷到记录且这节课还没点过的 { //后半段与choose 函数一致 printf(\ %s\\n\ printf(\ %s\\n\ printf(\ yon=getchar(); e=getchar(); putchar('\\n'); if(yon=='n') { 17 C语言课程设计实习报告 b[i]++; printf(\ printf(\ printf(\ } } printf(\ borderdown(); } 5 清除模块 用saverecord函数使历史记录sturecord.dat恢复到原始值。 void clear(int *a,int *b) { int i; for(i=0;i 18 a[i]=0; b[i]=0; C语言课程设计实习报告 saverecord(a,b); printf(\ All record has been clear successfully.\\n\\n\\n\} 删除模块: 用户输入要删除的信息,如输入歌曲名 ,根据歌曲名找到其他记录并删除。 [程序] void delete() { int j,v,c; char w[20]; FILE *fp; printf(\scanf(\ fp=fopen(\ for(j=0;j<100;j++) { } v=j; for(j=0;j 19 if(fread(&dan[j],sizeof(struct system),1,fp)!=1) break; C语言课程设计实习报告 } { } fclose(fp); if(strcmp(w,dan[j].name)==0) c=j; fp=fopen(\ for(j=0;j printf(\i--; if(j!=c) fwrite(&dan[j],sizeof(struct system),1,fp); (4)菜单函数 菜单函数调用五个功能函数实现菜单的功能,return回到主函数存储数据后程序结束。 void function(Student *stu,int *a,int *b,int *c) { char f,e; //'f'存选择 'e' 存回车 20 C语言课程设计实习报告 } while(1) { printf(\ Enter function number<1-6>:[ ]\\b\\b\scanf(\e=getchar(); } switch(f) { } case '1':pickc(stu,a,b,c);break; case '2':pickn(stu,a,b,c);break; case '3':printrecord(stu,a,b);break; case '4':pickhistory(stu,b,c);break; case '5':clear(a,b);break; case '6':printf(\ \default:menu(); //menu函数打印功能及对应数字 } (5)打印界面函数 21 C语言课程设计实习报告 void title() { printf(\ printf(\ *\\n\printf(\ ROLL CALL SYSTEM *\\n\printf(\ *\\n\ printf(\} void menu() { borderup(); printf(\ printf(\ 1:choose one student each time\\n\ printf(\ 2:choose several students\\n\ printf(\ 3:open history record\\n\ printf(\ 4:choose students who have absence recored\\n\ printf(\ 5:clear history\\n\ printf(\ 6:exit\\n\ printf(\ (default:show this instruction again)\\n\ borderdown(); } void borderup() { printf(\} void borderdown() { printf(\} 22 C语言课程设计实习报告 开始 读入数据 选择功能 保存数据 结束 连续点名 点多人 历史记录 点旷到学生 清除记录 退出 程序的流程图如上 23 C语言课程设计实习报告 五 上机操作 1 主菜单函数 2 连续点名功能 24 C语言课程设计实习报告 25 C语言课程设计实习报告 3 多人点名功能 26 C语言课程设计实习报告 4浏览历史模块. 27 C语言课程设计实习报告 5 点旷到学生模块 28 C语言课程设计实习报告 6.删除记录模块 7 退出模块 29 C语言课程设计实习报告 学 习 心 得 这次C语言课程设计让我学到了很多东西,有了自己设计程序、编写程序的经验,可以自己解决编程过程中的遇到的困难与问题。 一开始随机数不会写,到网上查阅了资料学会了随机数需要的函数。文件的读写也碰到了很多问题,编写从student.txt读信息到结构体的函数用了很长时间,刚写的时候不是字符数目不对,就是对fgets函数不熟悉(不知道碰到回车符时自动结束)。在读写信息存到文件sturecord.dat时,用二进制存取,但在打开与读取时没用’wb’’rb’因而碰到了很奇怪的问题,做了很多检查又看了书后才发现问题。 有一次没有改完错误就关了机,过了几天才又编写,结果打文件编译有问题时完全忘了在哪有问题,提示有8个错误。然后只能隔离各个函数检查,不久发现了问题所在。 有时候改了很多地方才又重新编译,结果错了很多处,找了一下找不到问题,又忘记改了哪里,让事情变得很麻烦。这让我知道以后大幅更改前应先另存文件或将改的地方做标记。 当运行效果更预计不一样时,我学会了从运行情况分析代码不完善的地方。例如,各功能函数编好了后,运行时发现依次运行123456功能时3不正常,显示error(表示输入了1-6以外的数),之后456也error,但第一次运行3、4、5或6又正常。之后我分别运行11、 30 C语言课程设计实习报告 22、33、44、55、66。发现只有连续用两次2功能时有问提,并且之后再用其他的也有问题。于是我确定是2的函数有问题,并且是输入的问题,在之后运行其他功能时是把回车传了进去。检查后发现2中确实忘记接收回车。 这次编程让我学到了不少知识,更让我意识到了自己动手实践的重要性,有耐心、毅力才能把事情做好。 六、算法和系统的优缺点 系统的优点是简洁、清晰,每次次用完一个功能屏幕上的内容都在一个框内,显得有条理。点名的信息以文件储存,便于调用。 改进思路: 在删除模块中加入可选择的删除模式,达到如查找模块一样的可选择模式删除。另外在退出系统模块中加入返回主菜单功能。 七 :原代码(附录) #include 31 C语言课程设计实习报告 #include char author[20]; char singer[20]; char time[20]; char name[20]; } dan[100]; void enter() { int j; char c[2]; FILE *fp; if((fp=fopen(\ { printf(\exit(0); 32 C语言课程设计实习报告 } for(j=0;j printf(\scanf(\ printf(\scanf(\printf(\scanf(\printf(\scanf(\ fwrite(&dan[j],sizeof(struct system),1,fp); if(fwrite(&dan[i++],sizeof(struct system),1,fp)!=1) printf(\ else printf(\ printf(\scanf(\ if(strcmp(c,\ } 33 C语言课程设计实习报告 } fclose(fp); void delete() { int j,v,c; char w[20]; FILE *fp; printf(\scanf(\ fp=fopen(\ for(j=0;j<100;j++) { } v=j; for(j=0;j if(strcmp(w,dan[j].name)==0) 34 if(fread(&dan[j],sizeof(struct system),1,fp)!=1) break; C语言课程设计实习报告 } } c=j; fclose(fp); fp=fopen(\ for(j=0;j printf(\i--; if(j!=c) fwrite(&dan[j],sizeof(struct system),1,fp); void browse() { int j; FILE *fp; fp=fopen(\ for(j=0;j<100;j++) { 35 C语言课程设计实习报告 } } if(fread(&dan[j],sizeof(struct system),1,fp)==1) { } else break; printf(\printf(\printf(\printf(\printf(\ fclose(fp); void search() { int flag,j,x; char w[20]; FILE *fp; char v[20]; printf(\ printf(\printf(\ 36 C语言课程设计实习报告 printf(\scanf(\ if(x==3) { flag=0; printf(\ scanf(\ fp=fopen(\ for(j=0;j<100;j++) { } 37 if(fread(&dan[j],sizeof(struct system),1,fp)!=1) break; if(strcmp(dan[j].name,w)==0) { } printf(\printf(\printf(\printf(\printf(\flag=1; C语言课程设计实习报告 } if(flag==0) printf(\ fclose(fp); else if(x==2) { flag=0; printf(\ scanf(\ fp=fopen(\ for(j=0;j<100;j++) { if(fread(&dan[j],sizeof(struct system),1,fp)!=1) break; if(strcmp(dan[j].singer,v)==0) { printf(\printf(\printf(\printf(\printf(\flag=1; 38 C语言课程设计实习报告 } } } if(flag==0) printf(\ fclose(fp); else if(x==1) { flag=0; printf(\ scanf(\ fp=fopen(\ for(j=0;j<100;j++) { if(fread(&dan[j],sizeof(struct system),1,fp)!=1) break; if(strcmp(dan[j].author,w)==0) { printf(\printf(\printf(\printf(\printf(\ 39 C语言课程设计实习报告 } } } } flag=1; if(flag==0) printf(\ fclose(fp); else printf(\ main() { while(1) { int a; printf(\to the song'system!------by change\\n\ printf(\^o^*******************\\n\\n\ printf(\ printf(\ 40 MENU C语言课程设计实习报告 printf(\ printf(\ printf(\ printf(\\ printf(\ } } scanf(\if(a==0) break; switch(a) { case 1:enter();break; case 2:delete();break; case 3:browse();break; case 4:search();break; } 41
正在阅读:
C课设报告:多功能上课点名系统 - 图文05-02
我的愿望,普通话02-16
计算机网络技术11级人才培养方案07-19
2017-2023年中国有机蔬菜行业全景调研及市场运营趋势报告(目录02-28
初秋丝语10-29
春之歌作文500字07-13
湟中县小学研究性学习成果报告12-18
美丽的海滨城市作文500字07-03
etabs2015安装说明02-03
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 点名
- 多功能
- 上课
- 图文
- 报告
- 系统
- 2011中考数学真题解析11 合并同类项,去括号,添括号,幂的运算性质
- 【公司概论】形成性考核册试题答案
- 北京市海淀区2013届高三第一学期期末练习物理及答案 - 图文
- 岗位责任与目标承诺书
- 2018届宁夏银川市第二中学高三下学期高考等值卷(二模)文综历史试
- 财经法规与会计职业道德 第二章《支付结算法律制度》知识点
- 四川省经济责任审计操作指南征求意见稿(附件)
- 宝宝准备
- 太仓花木可研
- 统考模拟系统学生操作手册
- 发电厂电气部分课程设计 最终
- 管理英语2作业
- 第1期(在县委读书会上的讲话)
- 鹿角与鹿腿的材料作文
- 国家计算机二级c语言2010-2007年真题及答案
- 机油冷却器装配线上料装置及装配机械手设计
- 2012年试用期工作述职报告
- 清代八旗制度中的值年旗
- 芳香烃的研究
- 洗煤选煤厂建设可行性研究报告2