教师学科教案[ 20 – 20 学年度第__学期]
任教学科:_____________
任教年级:_____________
任教老师:_____________
xx市实验学校
课程设计
设计题目教学设备管理系统
学生姓名
学号
专业班级
指导教师
院系名称
教学设备管理系统
目录
1.问题描述
2.系统功能和各个功能模块的介绍
3.系统设计方法
4.系统实现的主要技术原理和方法
5.编码、调试、分析
6.感想总结
7.参考资料
8.附录
1.问题描述
学校对教学设备管理都还使用着传统的模式。在此模式下,人工的记录教学信息。而随着时代的不断发展这样的模式已经不能完全适应现代的形势。
信息化时代的到来,使学校传统的管理方法和应用水平都受到了极大的挑战。随着Internet技术持续迅猛的发展,给传统的设备管理模式提出了新的要求。较之传统的管理方式,开发的教学管理系统的优势有:一方面可以动态地管理设备信息;另一方面,管理员可以在任意时间、任意地点通过网络查看设备信息;另外计算机化的管理的一大特点是查找准确而迅速:系统可以在输入结束后当场给出准确的查询结果。
2.系统功能和各个模块功能的介绍
对于教务处来,工作之一主要是管理教学所用的各种设备和物品,现在要求设计一套管理系统,管理教学的各种设备系统功能要求如下:
1. 将每一个教学设备编号、设备名称、生产厂家、购置日期、台数、单价、及备注作为一个记录,该软件能建立一个新的数据文件
或给已建立好的数据文件增加记录。
2. 根据用户提供的记录或者根据设备编号显示一个或几个设备的记录。
3. 可以对数据文件的任意记录的数据进行修改并在修改前后对记录内容进行显示。
4.可以对数据文件的任意记录的数据进行查找并在查找前后对记录内容进行显示。
5. 可删除数据文件中的任一记录。
6.能恢复被删除的任一记录。
7.可以在数据文件中添加记录并添加记录后对记录内容进行显示。
8.(A)统计每页合计台数及金额;(B)累计设备的总台数及总金
额;(C)统计单价在:200元以下、200~800元之间和800元以上的设备总台数及总金额。(D)按字符表格形式打印合肥工业大学教学设备明细表。
9.保存数据文件。
10.打开数据文件。
根据对该系统的需求分析可知,设计的教学管理系统有分9个功能:(1)输入设备信息
(2)显示设备信息
(3)修改设备信息
(4)查找设备信息
(5)删除设备信息
(6)恢复设备信息
(7)添加设备信息
(8)统计设备信息
(9)保存设备信息
并且设计出一个方案:
3.系统设计方法
我们这个组有三个人,在我们商量确定了我们的系统的需求后,我们
合作做了打开系统的函数、退出函数和主函数,又分工分做几个子系统,而我负责的是修改设备信息、恢复设备信息以及保存设备信息。我们这个系统没有建立数据库,只是简单地运用数组来存储数据,但系统的功能还是很全面的。
我的设计部分:
(1)修改设备数据:
当我们新购进了一些教学设备,就需要我们修改数据,这里分为两部分,首先要确定我们是否有该设备,若有,则更新该数据。
int modify() /*定义修改函数*/
{
char name[30];
int i,n;
printf("输入要修改的设备编号:");
scanf("%s",name);
printf("\n");
for(i=0;i { if(strcmp(s[i].id,name)==0) n=modifyf(i); /*调用确认修改函数*/ } printf("\n"); if (n!=1) printf("对不起,该设备不存在\n\n"); system("pause"); return 1; } int modifyf(int i) /*定义确认修改函数*/ { showsingle(i); printf("\n请输入修改后的数据:\n\n"); printf("设备名称:"); scanf("%s",&s[i].name); printf("产地:"); scanf("%s",&s[i].cd); printf("购置日期:"); scanf("%s",&s[i].rq); printf("台数:"); scanf("%d",&s[i].ts); printf("单价:"); scanf("%d",&s[i].dj); printf("金额:"); scanf("%d",&s[i].je); printf("备注:"); scanf("%s",&s[i].bz); /*逐个修改该职工信息,只修改了基本工资,待修改*/ printf("\n"); printf("修改结果如下:\n\n"); showsingle(i); return 1; } (2)恢复数据: 当我们想恢复我们删除的数据信息时,这时,我们就用到了该函数。 int recovery() { char name[30]; int i,n; printf("\n请输入要恢复的设备编号:"); scanf("%s",name); for(i=0;i { if(strcmp(d[i].id,name)==0) { s[length]=d[i]; length++; n=1; printf("\n恢复成功\n"); //需修正,不能无限次恢复,应只恢复一次,而且应修复到被删除的地方 printf("\n恢复后结果如下:\n"); display(); } } printf("\n"); if (n!=1) { printf("对不起,该设备尚未存在记录\n\n"); system("pause"); } return 1; } (3)保存数据 int save() { FILE *fout; printf("\n请为您保存的文件命名:"); scanf("%s",fname); fout=fopen(fname,"wb"); //文件名为fname,数组名,无双引号 fwrite(s,sizeof(SB),length,fout); fclose(fout); printf("\n保存成功\n\n"); system("pause"); return 1; } 队友的设计部分: (1)输入数据:输入教学设备名称,编号,产地,购置日期,台数,单价,金额等的相关信息,通过自己定义的input()函数来实现。 int input() /*输入数据*/ { int num,i; printf("\n请输入你想创建的记录个数:"); scanf("%d",&num); printf("\n"); for (i=0;i { printf("设备编号:"); scanf("%s",&s[length].id); printf("设备名称:"); scanf("%s",&s[length].name); printf("产地:"); scanf("%s",&s[length].cd); printf("购置日期:"); scanf("%s",&s[length].rq); printf("台数:"); scanf("%d",&s[length].ts); printf("单价:"); scanf("%d",&s[length].dj); printf("金额:"); scanf("%d",&s[length].je); printf("备注:"); scanf("%s",&s[length].bz); printf("\n"); ++length; /*结构体数组长度增加1*/ } system("pause"); return 1; } (2)显示数据:显示输入后保存的全部信息,通过自己定义的display()函数来实现。 int showsingle(int i) {printf(" 设备编号设备名称产地购置日期台数单价 金额备注\n"); printf("%8s %11s %6s %11s %5d %7d %10d %7s \n",s[i].id,s[i].name,s[i].cd,s[i].rq,s[i].ts,s[i].dj,s[i].je,s[i].bz ); return 1; } int display() //定义显示函数 {int i; printf(" 设备编号设备名称产地购置日期台数单价 金额备注\n"); for(i=0;i printf("%8s %11s %6s %9s %5d %7d %8d %6s \n",s[i].id,s[i].name,s[i].cd,s[i].rq,s[i].ts,s[i].dj,s[i].je,s[i].bz ); system ("pause"); return 1; } (3)查找数据:可以按编号查询教学设备信息,通过自己定义的search ()函数来实现。 int search() /*定义查找函数*/ { char name[30]; int i,n; printf("请输入要查询的设备编号:"); scanf("%s",name); printf("\n"); for(i=0;i {if(strcmp(s[i].id,name)==0) /*调用字符串比较函数若employee[i]中的名字和要查找的人同名,则输出他的信息*/ n=showsingle(i); } printf("\n"); if (n!=1) printf("对不起,该设备尚未存在记录\n\n"); system ("pause"); return 1; } (4)删除数据:删除需要删除的教学设备记录,通过自己定义的 delete1()函数来实现。 int delete1() /*定义删除记录函数*/ { char name[30]; int i,n; printf("请输入要删除的设备编号:"); scanf("%s",name); for(i=0;i { if(strcmp(s[i].id,name)==0) /*调用字符串比较函数若employee[i]中的名字和要删除的人相同,则执行删除函数deletef(i)*/ n=deletef(i); } printf("\n"); if (n!=1) {printf("对不起,该设备尚未存在记录 \n\n");system("pause");} return 1; } int deletef(int local) /*定义确认删除函数*/ {int i; d[k]=s[local]; //结构体整体赋值 k++; for(i=local;i { strcpy(s[i].id,s[i+1].id); strcpy(s[i].name,s[i+1].name); strcpy(s[i].cd,s[i+1].cd); strcpy(s[i].rq,s[i+1].rq); s[i].ts=s[i+1].ts; s[i].dj=s[i+1].dj; s[i].je=s[i+1].je; /*从删除的职工开始把后一个职工的所有数据依次赋给前一个职工*/ strcpy(s[i].bz,s[i+1].bz); } length--; /*结构体数组长度减1*/ printf("\n删除成功\n"); printf("\n删除后结果如下:\n"); display(); return 1; } (5)恢复数据 int recovery() { char name[30]; int i,n; printf("\n请输入要恢复的设备编号:"); scanf("%s",name); for(i=0;i { if(strcmp(d[i].id,name)==0) { s[length]=d[i]; length++; n=1; printf("\n恢复成功\n"); //需修正,不能无限次恢复,应只恢复一次,而且应修复到被删除的地方 printf("\n恢复后结果如下:\n"); display(); } } printf("\n"); if (n!=1) { printf("对不起,该设备尚未存在记录\n\n"); system("pause"); } return 1; } (6)统计数据:统计在(0,200)(200,800)(800,+∞)区间内的设备台数,通过自己定义的count()函数来实现。 int count () { int i,zts=0,zje=0,num1=0,num2=0,num3=0,num4=0,num5=0,num6=0; printf(" 设备编号设备名称产地购置日期台数单价金额备注\n"); for(i=0;i printf("%8s %11s %6s %9s %5d %7d %8d %6s \n",s[i].id,s[i].name,s[i].cd,s[i].rq,s[i].ts,s[i].dj,s[i].je,s[i].bz ); for (i=0;i for(i=0;i printf(" 合计 %34d %16d \n",zts,zje); for(i=0;i { if (s[i].dj<200) {num1+=s[i].ts;num2+=s[i].je;} if (200<=s[i].dj&&s[i].dj<800) {num3+=s[i].ts;num4+=s[i].je;} if (s[i].dj>=800) {num5+=s[i].ts;num6+=s[i].je;} } printf("\n单价在 200 元以下的设备总台数为%4d,总金额为 %d\n",num1,num2); printf("\n单价在 200~800 元的设备总台数为%4d,总金额为 %d\n",num3,num4); printf("\n单价在 800 元以上的设备总台数为%4d,总金额为 %d\n",num5,num6); system("pause"); return 1; } int open() { FILE *fout; char fname2[10]; int i,n,j; printf("\n请输入您想打开的文件名:"); //文件名有问题 scanf("%s",fname2); if ((fout=fopen(fname2,"rb"))!=NULL) {if (length==0) { for (j=0;j<10;j++) {fread(&all[j],sizeof(SB),1,fout); if (all[j].dj!=0) length++; } fclose(fout); n=1; } else {fread(all,sizeof(SB),length,fout); //结构体数组all接受二进制整体赋值,并通过该数组输出退出程序再次打开时length为0,所以没有读入数据 fclose(fout); n=1; } } else {printf("\n您输入的文件名不存在\n\n"); system("pause"); } if (n==1) {for (i=0;i<10;i++) s[i]=all[i]; display(); } return 1; } 4.系统实现的主要技术原理和方法 我们这个教学设备管理系统的主要用到的是数组和系统函数,方法是经过逐层逐块、不断细化、求精过程,编写程序并进行测试、验证,可以逐个模块地分开调试,并通过文件包含或用工程文件的形式进行逐步联合调试。我们并没有建立数据库,用这个系统的人可以根据需要自行的输入设备信息,让后保存在就是可以经行其他功能的操作了。 5.编码、调试、分析 一、编码 确定主函数,在系统中设置一个主页面,然后设计一个菜单界面,用来作为功能选择器,从而可以设置上述的函数来完成这些功能。把主函数与菜单函数,和上述子函数结合构成一个完整的系统程序。经调试和分析得到我们想要的系统。 int main() { int i; home(); while (1) { system("cls"); i=menu(); if (i==0) {printf("\n请按任意键退出\n");return 1;} if (i==1) {input();system("cls");} if (i==2) {display();system("cls");} if (i==3) {modify();system("cls");} if (i==4) {search();system("cls");} if (i==5) {delete1(); system("cls");} if (i==6) {recovery();system("cls");} if (i==7) {add();system("cls");} if (i==8) {count();system("cls");} if (i==9) {save();system("cls");} if (i==10){open();system("cls");} } return 1; } int home() { system("cls"); printf(" \n\n\n\n\n\n\n"); printf(" 合肥工业大学\n\n"); printf(" 教学设备管理系统\n\n\n\n"); printf(" 请按Enter键进入\n\n\n\n"); while (getchar()!='\n'); return 1; } int menu() /*定义界面函数*/ { int flag=0; printf(" \n\n\n\n\n\n\n"); printf(" 合肥工业大学教学设备管理\n"); printf(" ********************************************\n"); printf(" | 1 输入记录 2 显示记录 |\n"); printf(" | 3 修改记录 4 查找记录 |\n"); printf(" | 5 删除记录 6 恢复记录 |\n"); printf(" | 7 添加记录 8 统计 |\n"); printf(" | 9 保存 10 打开 |\n"); printf(" | 0 退出 |\n"); printf(" ********************************************\n"); printf(" 请输入0-10:"); scanf("%d",&flag); /*输入要执行的功能前的数字*/ return flag; } 二、调试与分析 通过上面的功能函数可以看出,我们做过调试,删除设备信息和修改设备信息的时候,我们都会有一个再次确定的信息功能,还有出入的设备信息格式错误也会有显示,,或者在查找的时候,所查查找的设备部存在。经过我们的调试和分析,从而确定了最佳的函数编码。如下图,是在我们运行调试后的结果: 三、测试结果