课 程 设 计 报 告
教师名称 C语言教师设计
课题名称 教师信息管理系统
专 业 建筑环境
班 级 1202
学 号 12
姓 名 文永全
指导教师 田 媛
2013年 06 月 30 日
湖南工程学院
课 程 设 计 任 务 书
教师名称 C语言教师设计
课 题 教师信息管理系统
专业班级 建筑环境1202
学生姓名 文永全
学 号 12
指导老师 田媛
审 批
任务书下达日期 2013 年 06 月 22 日
任务完成日期 2013年 06 月 30 日
一、设计内容与设计要求
1.设计内容:
课题五:教师信息管理系统。具体内容见附件。
2.设计要求:
1)设计正确,方案合理。
2)界面友好,使用方便。
3)程序精炼,结构清晰。
4)上机演示。
3.设计报告要求:
教师设计报告格式如下:
1)正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体,行距为22。
2)正文的内容:课题的主要功能、课题的功能模块的划分、主要功能的实现、程序调试、总结、附件(所有程序的源代码,要求对程序写出必要的注释),教师设计报告需5000字左右(不含附件)。
3)教师设计报告装订顺序:封面、任务书、目录、正文、评分、程序清单附件。
附录:
设计课题五:教师信息管理系统
一、问题描述:
本系统可以用来进行简单的教师信息管理,具体管理操作包括:教师信息的录入、添加、显示、查找、删除、修改、排序和保存等功能。
二、功能描述:
1、本系统采用结构体数组,每个数据的结构应当包括教师号、教师姓名、性别、系别、年龄、学历等。
2、系统功能:
a.信息录入:即添加新的教师信息记录。
b.信息显示:
(1)按教师编号顺序显示
(2)按教师姓名顺序显示
c.信息查询:
(1)按教师名查询
(2)按教师号查询
d.信息修改:即修改已录入的信息记录。
e.信息报废:即删除不需要的信记录息。
f.信息保存: 将录入的教师信息保存到文件。
g.退出系统。
3、系统使用说明:执行一个具体的功能之后,程序将重新显示功能菜单。系统的功能并不限于上述,可以对其进行扩充完善。
三、测试数据:
教师人数>=10
目 录
1.题目设计思想简述···············································6
2.详细设计··················································7
1.教师信息录入函数·············································7
2.教师信息显示函数·············································7
3.教师信息查询函数·············································8
4.教师信息排序函数·············································8
5.教师信息修改函数·············································9
6.教师信息删除函数·············································9
7.教师信息保存函数·············································9
3.源程序代码·····················································10
4.程序运行效果图················································18
4.1登陆界面···················································19
4.2录入功能····················································19
4.3显示功能···················································20
4.4查询功能···················································20
4.5排序功能···················································21
4.6修改功能···················································21
4.7删除功能···················································22
4.8保存功能···················································22
5.总结报告······················································23
5.1课程设计中遇到的主要问题和解决方法·························23
5.2创新和得意之处············································23
5.3设计中存在的不足及改进的设想·······························23
5.4本次课程设计的感想和心得体会······························24
1.题目设计思想简述
如上图所示,该教师信息管理系统主要是一个选择语句应用为基础来实现对教师信息的录入,查询,删除等功能。
定义的结构体如下:
struct teacher
{
int no; //编号
char name[99]; //姓名
char xingbie[99];//性别
char xibie[99]; //系别
int Hyear; //年龄
char xueli[99]; //学历
};
主函数进行菜单栏函数的调用,主要工作通过菜单函数实现。
菜单栏函数通过用switch语句实现不同功能的选择,不同的功能用不同的子函数实现。
显示信息函数就是把结构体数组中教师的信息按数组的顺序输出。
排序函数用冒泡法对教师信息进行排序,
查询函数分按姓名查询和教师编号查询,先用一个Switch语句进行选择,然后按姓名查找时用循环语句进行查找,用输入的姓名字符串与已有的字符串进行比较,然后输出查询的结果。若果按教师号进行查询,也是先用一个循环语句,然后再加一个条件语句进行判断,最后输出查询结果。
修改教师信息函数,用户先输入要修改的教师编号,然后用一个循环语句找到结构体数组中对应的编号,如果没找到就输出没有要修改的教师,找到后输出该编号的信息提示是否修改,如果确定修改就将修改的信息输入另一个新结构体变量中,最后将新结构体中的信息赋值给原来要修改的结构体变量中。
删除信息函数,用户先输入要删除的教师编号,用一个条件语句找到数组中的编号,没找到就输出没找到要删除的教师,找到后就将结构体数组中从该编号起向前移一个。
保存信息函数,利用文件的字符写函数将输入的信息保存到文件中。
2.详细设计
1.教师信息录入函数(void input() )
(1)先定义一个while语句,当输入Y时,输入教师信息。while(choice1=='y' || choice1=='Y')
(2 )定义结构体数变量struct teacher temp;将教师信息录入该结构体中。
(3)把该结构体数组赋值给结构体数组的第零个元素tea[count]=temp;; count++;;
(4)清空temp中的信息,fflush(stdin);
(5)要继续输入,输入Y将重复上述操作。
2.显示信息函数(void displayall()))
(1)定义整型变量i;
(2)用一个for循环语句将教师信息依次输出,知道i=count;
if(count<1)
printf("\\n\没有教师信息!\\n");
else
{
printf("\\n编号\姓名\性别\系别\年龄\学历\\n");
for(i=0;i printf("%-3d",tea[i].no); printf("\%s",tea[i].name); printf("\%s",tea[i].xingbie); printf("\%s",tea[i].xibie); printf("\%d",tea[i].Hyear); printf("\%s\\n",tea[i].xueli); } } 3.查询信息函数void seach() (1)定义整型变量i,xh,j,结构体变量( struct tescher hname;) (2)字符变量choice (3)编写一个switch选择语句当choice=1时按教师姓名查询,当choice=2时按教师编号查询 (4)用循环语句查找要查询的教师编号或姓名:for(i=0;i 4.排序函数void sort() (1)选用冒泡法来将教师信息进行排序 (2)定义整型变量i,jchoice; (3)编写一个条件语句如果count小于1就没有教师信息,否则输出排序前的教师信息。 (4)编写一个大的循环语句,里面再写一个选择语句:当输入1时按编号升序排序,当输入2时按姓名升序排序,3按年龄降序,当输入9时结束循环。该函数结束。 (5)排序后用前面的显示函数将排序后的结果输出, (6)按编号排序函数:冒泡法排序 for(i=0;i for(j=0;j if(tea[j].no > tea[j+1].no)//比较第j个元素与第(j+1)元素中的编号,如果第j元素中的大就交换 { temp=tea[j]; tea[j]=tea[j+1]; tea[j+1]=temp; } } } (6)按姓名排序:冒泡法排序 for(i=0;i for(j=0;j if(tea[j].no > tea[j+1].no) { temp=tea[j]; tea[j]=tea[j+1]; tea[j+1]=temp; } } } (7)按年龄降序: for(i=0;i for(j=0;j if(tea[j].Hyear < tea[j+1].Hyear) { temp=tea[j]; tea[j]=tea[j+1]; tea[j+1]=temp; } } } 5.教师修改函数void change() (1)定义整型变量i,xh,j,int i,xh,j=0;; (1)定义结构体变量struct teacher temp;; (2)编写一个for语句找到结构体数组中要修改的元素i, for(i=0;i printf("\\n\没有找到要修改的教师!\\n"); (3)在给一个条件语句判断如果J=1,将用显示函数输出你要修改的信息如下;是否确定修改,若输入y则录入教师信息到结构体变量temp中; (4)条件判断语句,如果输入y则将temp变量赋给结构体变量I; if (choice=='Y' || choice=='y') tea[i]=temp; } 6.删除教师信息函数void del() (1)定义整型变量dno,i,j,字符型变量choice, (2)输入要删除的教师编号,和上面一样用for循环语句找到该教师的编号i; (3)如果i 7.保存信息函数void baocun() (1)定义文件指针*fp,整型变量i; (2)以只写方式打开文件打开一个标准文件,并使文件指针*fp指向该文件; (3)用一个for循环语句将所有的教师信息读入到文件中 for(i=0;i fprintf(fp,"%-3d",tea[i].no); fprintf(fp,"\%s",tea[i].name); fprintf(fp,"\%s",tea[i].xingbie); fprintf(fp,"\%s",tea[i].xibie); fprintf(fp,"\%d",tea[i].Hyear); fprintf(fp,"\%s\\n",tea[i].xueli) (4)最后关闭文件; #include #include #define scores 3 struct teacher { int no; //编号 char name[99];//姓名 char xingbie[99];//性别 char xibie[99];//系别 int Hyear;//年龄 char xueli[99];//学历 }; struct teacher tea[99]; //声明一个结构数组变量 int count=0; void input(); void displayall(); void displayone(struct teacher); void sort(); void seach(); void change(); void del(); void baocun(); void main() { int choice; do { printf("\☆☆☆☆☆欢迎使用教师信息绩管理系统☆☆☆☆☆\\n\\n"); printf("\\1. 录 入 教 师 信 息\\n"); printf("\\2. 显 示 教 师 信 息\\n"); printf("\\3. 查 询 教 师 信 息\\n"); printf("\\4. 教 师 信 息 排 序\\n"); printf("\\5. 修 改 教 师 信 息\\n"); printf("\\6. 删 除 教 师 信 息\\n"); printf("\\7. 保 存 教 师 信 息\\n"); printf("\\9. *退出教师成绩管理系统*\\n\\n"); printf("\\请选择:"); scanf("%d",&choice); switch(choice) { case 1: input(); break; case 2: displayall(); printf("\\n"); printf("\\n"); break; case 3: seach(); printf("\\n"); printf("\\n"); break; case 4: sort(); break; case 5: change(); break; case 6: del(); break; case 7: printf("\\n\\信息已保存!\\n\\n"); baocun(); break; case 9: printf("\\n\谢谢使用本系统!\\n"); break; default: printf("\\n\选择错误!请重新选择。\\n"); } //switch结构结束 }while(choice!=9); //do结构结束 } //main函数结束 void input() //录入函数 { struct teacher temp; char choice1='y',choice2; while(choice1=='y' || choice1=='Y') { printf("\\n\教师编号:"); scanf("%d",&temp.no); printf("\\n\教师姓名:"); scanf("%s",temp.name); printf("\\n\教师性别:"); scanf("%s",temp.xingbie); printf("\\n\教师系别:"); scanf("%s",temp.xibie); printf("\\n\教师年龄:"); scanf("%d",&temp.Hyear); printf("\\n\教师学历:"); scanf("%s",temp.xueli); printf("\\n\您输入的教师信息如下:\\n"); displayone(temp); printf("\\n\确定要保存吗(Y/N)?"); fflush(stdin); choice2=getchar(); if (choice2=='Y' || choice2=='y') { tea[count]=temp; count++; } printf("\\n\要继续输入吗(Y/N)?"); fflush(stdin); choice1=getchar(); } } void displayone(struct teacher t) //显示信息函数 { printf("\\n\编号:%d",t.no); printf("\\n\姓名:%s",t.name); printf("\\n\性别:%s",t.xingbie); printf("\\n\系别:%s",t.xibie); printf("\\n\年龄:%d",t.Hyear); printf("\\n\学历:%s",t.xueli); } void displayall() //显示信息函数 { int i; if(count<1) printf("\\n\没有教师信息!\\n"); else { printf("\\n编号\姓名\性别\系别\年龄\学历\\n"); for(i=0;i printf("%-3d",tea[i].no); printf("\%s",tea[i].name); printf("\%s",tea[i].xingbie); printf("\%s",tea[i].xibie); printf("\%d",tea[i].Hyear); printf("\%s\\n",tea[i].xueli); } } } void sort() //排序函数 { /* 冒泡排序法*/ int i,j,choice; struct teacher temp; if(count<1) printf("\\n\没有教师信息!\\n"); else { printf("\\n\排序前的教师信息:\\n"); displayall(); do { printf("\\n\1. 按 编 号 升 序"); printf("\\n\2. 按 姓 名 升 序"); printf("\\n\3. 按 年 龄 降 序"); printf("\\n\9. 返 回 主 程 序"); printf("\\n\ 请选择排序依据:"); scanf("%d",&choice); switch(choice) { case 1: for(i=0;i for(j=0;j if(tea[j].no > tea[j+1].no) { temp=tea[j]; tea[j]=tea[j+1]; tea[j+1]=temp; } } } break; case 2: for(i=0;i for(j=0;j if(strcmp(tea[j].name,tea[j+1].name)>0) { temp=tea[j]; tea[j]=tea[j+1]; tea[j+1]=temp; } } } break; case 3: for(i=0;i for(j=0;j if(tea[j].Hyear < tea[j+1].Hyear) { temp=tea[j]; tea[j]=tea[j+1]; tea[j+1]=temp; } } } break; case 9: break; default: printf("\\n\选择错误,请重新选择!\\n"); } //switch结构结束 if(choice>=1 && choice <=3) { printf("\\n\排序后的教师信息:\\n"); displayall(); } }while(choice!=9); //do循环结束 } //if判断结束 } void seach()//查询函数 { int i,xh,j=0; struct teacher Hname; char choice; printf("\\n\请选择查询方式:"); printf("\\n\1. 按 教 师 姓 名 查 询 "); printf("\\n\2. 按 教 师 编 号 查 询 \\n\\n"); printf("\\请选择:"); fflush(stdin); scanf("%d",&choice); switch(choice) { case 1: printf("\\n\请输入要查询教师的姓名: "); fflush(stdin); scanf("%s",Hname.name); for (i=0;i<99;i++) if (strcmp(Hname.name,tea[i].name)==0) { j=1; break; } if (j==0) printf("\\n\没有找到要查询的教师!\\n"); else { printf("\\n\您要查询的教师信息如下:\\n"); displayone(tea[i]); printf("\\n"); } break; case 2: printf("\\n\请输入要查询教师的编号:"); scanf("%d",&xh); for(i=0;i { j=1; break; } if (j==0) printf("\\n\没有找到要查询的教师!\\n"); else { printf("\\n\您要查询的教师信息如下:\\n"); displayone(tea[i]); printf("\\n"); } break; default: printf("\\n\选择错误!请重新选择。\\n"); } } void change() //修改教师信息函数 { int i,xh,j=0; struct teacher temp; char choice; printf("\\n\请输入要修改教师的编号:"); scanf("%d",&xh); for(i=0;i { j=1; break; } if (j==0) printf("\\n\没有找到要修改的教师!\\n"); else { printf("\\n\您要修改的教师信息如下:\\n"); displayone(tea[i]); printf("\\n\要修改吗(Y/N)?"); fflush(stdin); choice=getchar(); if (choice=='Y' || choice=='y') { printf("\编号:"); scanf("%d",&temp.no); printf("\\n\姓名:"); scanf("%s",temp.name); printf("\\n\性别:"); scanf("%s",temp.xingbie); printf("\\n\系别:"); scanf("%s",temp.xibie); printf("\\n\年龄:"); scanf("%d",&temp.Hyear); printf("\\n\学历:"); scanf("%s",temp.xueli); printf("\\n\要保存所做的修改吗(Y/N)?"); fflush(stdin); choice=getchar(); if (choice=='Y' || choice=='y') tea[i]=temp; } } } void del()//删除教师信息函数 { int dno,i,j; char choice; printf("\\n\请输入要删除的教师的编号:"); scanf("%d",&dno); for(i=0;i if(tea[i].no==dno) break; } if(i printf("\\n\你要删除的教师信息如下:\\n"); displayone(tea[i]); printf("\\n\确定要删除该教师信息吗(Y/N)?"); fflush(stdin); choice=getchar(); if (choice=='Y' || choice=='y') { for(j=i;j count--; } } else printf("\\n\没有找到要删除的教师\\n"); } void baocun()//保存信息到文件 { FILE *fp; int i; fp=fopen("教师信息.txt fprintf(fp,"编号\姓名\性别\系别\年龄\学历\\n"); for(i=0;i fprintf(fp,"%-3d",tea[i].no); fprintf(fp,"\%s",tea[i].name); fprintf(fp,"\%s",tea[i].xingbie); fprintf(fp,"\%s",tea[i].xibie); fprintf(fp,"\%d",tea[i].Hyear); fprintf(fp,"\%s\\n",tea[i].xueli); } fclose(fp); } 3.程序运行效果图 3.1登陆界面 3.2录入功能 3.3显示功能 3.4查询功能 3.5排序功能 3.6修改教师信息 3.7删除功能 3.8保存功能 4.总结报告 5.1课程设计中遇到的主要问题和解决方法 在这次的C语言课程设计的编程中,由于以前对链表和文件这两部分的内容了解过少,因此在编程中涉及到这两方面的内容时,照成了很大的阻碍,最主要是在对链表的结点进行交换,对文件某些特殊的读写不清楚。而且由于第一次接触这类比较复杂一点的题目,在循环方面的应用有所不足,这也是一个问题。 在遇到这些问题时,对于每一个问题在实在无思路时,我首先会查阅相关的书籍,像文件中末尾读起的方法,在通过查看C语言的书后我才知道原来有专门的库函数可以用;在查阅完书籍确定该了解的基本内容已了解之后,自己再重新思考算法,然后不断的在VC++中调试,根据它的提示修正错误,直到编译无错且运行的结果正确为止。 5.2你的创新和得意之处 这个教师信息管理系统不仅按要求可以让用户自己选择要实现录入,浏览,查找,删除,排序中的任一种功能,而且在退出系统时为用户提供能是否要保存该次的信息到文件中的选择。且在浏览中当检查到用户该次登录还未录入过信息时,提供了是否要查看以前保存的文件的功能。 5.3设计中存在的不足及改进的设想 在设计过程中,由于对C语言的理解不够透彻,特别是链表和文件方面边查书边调试才写出来的,所以导致程序在一定程度上的不严密,例如浏览其他文件的信息只有在检测到该次登录还未录入过信息时才会提供用户选择之类的。当然,最主要的原因是由于第一次接触这种较复杂点的题目,在算法的设计上不好,才导致程序过于冗长不严谨的。程序在查找和排序时其实可以不用每种方式都写一个函数的,这样程序就不会显得过于冗长。而且系统提供功能选择方面也可以再调整的更完善。 5.4本次课程设计的感想和心得体会 从拿到题目到完成的三周时间里,我了解到了原来在C语言的方面的应用我所存在的不足,更掌握了很多之前不懂的知识。在此次的课程设计中,刚接触到题目时我就发觉了一个被我遗忘了的严重问题,那就是编程的能力只有通过不断敲写代码才能保持和提高的。由于过长时间没有写过代码的缘故,在拿到以前已经编过的简单题目时我也得查找书籍才最终编写完成,这重新提醒了我在编程方面实践的重要。 由于第一次拿到设计一个系统这样比较复杂的题目,尽管最后设计出来的系统很简单,当中间我所遇到的问题还是很多,甚至比学C语言时做过的所有题目遇到的还多。因此在编程时我几乎又把C语言的整本书重新看了一遍,有了更深刻的认识。另外,在这次的编写中,我了解到了以前所未了解的一个很重要的地方,就是设计算法的能力。因为以前所接触的题目都比较简单,所以没有专门想过设计算法,跟没有意识到其重要性,这次的题目让我明白了要编写出一个好的程序,设计一个好的算法是非常必要的。由于开始我在设计算法方面的意识不足,导致这次写出来的代码很累赘很繁琐,这时非常不好的。另外,我发现细节的注意不管是多熟悉编程了都很必要的,即使到最后快完成的时候我也会犯下缺函数的括号,语句缺冒号之类的小错误。 虽然这次完成题目的结果不太好,但能够自己完成还是带给了我很大的喜悦。这次课程设计使我意识到自己的多处不足,让我有机会去改进,为以后的编程之路打好基础,以后我还会自己多些找题目来实践,以提高我的能力。 计算机科学与技术系课程设计评分表 课程名称: VFP程序设计 日 期: 2013.7.2
教师签名: 项 目 评 价 设计方案的合理性与创造性 设计与调试结果 设计说明书的质量 答辩陈述与回答问题情况 课程设计周表现情况 综合成绩