您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页教师信息管理系统C语言课程设计讲解学习

教师信息管理系统C语言课程设计讲解学习

来源:意榕旅游网
课程设计任务书

计算机科学与技术 专业 2010 年级一班 陈金禾U

一、

设计题目 教师信息管理系统设计

二、 主要内容

教师信息包括教师号、姓名、性别、年龄、学历、职称、工资、 住址、

电话等(教师号不重复)。试设计一教师信息管理系统,使之能 提供以下功能:

(1) 系统以菜单方式工作 (2) 教师信息录入功能 输入 (3) 教师信息删除功能 (4) 教师信息浏览功能 输出

(5) 查询和排序功能:(至少一种查询方式)一一算法 按教师号查询

按职称查询等

三、

具体要求

围绕课程设计的目的和意义,基本要求如下:

1、 认真阅读《C语言课程设计》指导书,明确课程设计的目的、 意义和要

求;

2、 快速总结C程序设计语言的精髓,如:函数的概念、函数的设 计和函

数的调用;

3、 快速熟悉Tuber C或C++的上机环境。能熟练进行高级编辑操

作(特别是字块操作);熟悉步进式、断点跟踪的程序调试方法,提高 工作效

率。

4、 根据“课程设计题目” ,采用结构化的程序设计思想,确定系 统的总

体设计方案、确 \"定时间进度。如果是多人共一题,则要首先完 成小组内的人员分工及安排,不允许重题现象。

5.学习并了解良好的程序设计风格。按质、按量、并按时间完成 课程设

计的任务。

6.提供可运行的课程设计系统,参加上机面试答辩。 本次课程设计的重

点是:学会设计并编写函数,掌握好各函数之 间的调用关系;利用文件操作函数,建立数据库并完成对数据库的各 种操作;掌握几种典型算法的应用(如:冒泡法、选择排序法和折半 查找法)。同时锻炼学生根据题目进行分析、设计、编码、调试程序和 书写必要文档的综合处理能力,从实践中学习并体会程序设计的结构 化思想和设计方法。 四、

进度安排

依照教学计划,课程设计时间为 3 周。按照软件工程的思想,软件 系统的分析设计至关重要,并要充分重视书写“文档” 。避免甚至杜绝 “拿到题目就编码”的现象。建议将时间分为三个阶段:

第一阶段,根据题目要求,拿出系统的总体设计方案:即构思各 程序模块的算法,并画出相应的 N-S 图,同时编写相应的文档;

第二阶段,根据 N-S 图编写程序代码并单独调试,再将调试通过 的各个子模块进行集成调试;

第三阶段,归纳文档资料,按要求填写在《课程设计说明书》上, 并参加答辩

三个阶段时间分配的大概比例是: 五、

完成后应上交的材料

1 •课程设计的题目、系统的总功能和各子模块的功能;

35: 45: 20。

2•题目的设计思想(或算法)简述; 3 •主要程序的框图(要求用 N-S图);

4•源程序代码(要求在关键的位置有注释,从而增加程序的可读 性); 5•课程设计的总结报告,主要包括以下内容:

(1) 课程设计中遇到的主要问题和解决方法; (2) 你的创新和得意之处;

(3) 设计中存在的不足及改进的设想; (4) 本次课程设计的感想和心得体会。

以上完成的源程序及相关文档,填写在《课程设计说明书》上, 要求干净整洁,符合课程设计的要求和规范。 六、

总评成绩

指导教师 ____________________ 签名日期 ____________ 年 月 日

系主任 ______________________ 审核日期 ____________ 年 月 ____________ 日

目录

一•题目设计思想简述 ...................................................................................................... 5 二•程序的N—S图 ........................................................................................................... 7

2.1总程序的N—S图 ............................................................................................. 7 2.2各子函数的N — S图 ....................................................................................... 7 2.2.1 教师信息录入函数 2.2.2教师信息浏览函数 2.2.3 教师信息删除函数 2.2.4 教师信息查询函数 2.2.5教师信息排序函数

三.源程序代码 四.程序运行效果图

4.1

登陆界面

4.2菜单栏 4.3 录入功能 4.4

浏览功能

4. 5删除功能 4.6 查询功能 4.7排序功能

五.总结报告

5.1 课程设计中遇到的主要问题和解决方法5.2 你的创新和得意之处

5.3 设计中存在的不足及改进的设想 5.4 本次课程设计的感想和心得体会

8 8 9 9 10 11 33 33 33 34 34 35 35 36 37 37 37 37 38

.题目设计思想简述

如上图所示,该教师信息管理系统主要是一个以动态链表的应用 为基础来实现对教师信息的录入,查询,删除等功能。

定义教师结构体如下:

struct teacher {

long nu m;〃教师号 char name[20];〃姓名 char sex [5];//性 性别 int age;//年龄 char edu[20];〃 学历 char title[20];// 职称 long wage;//工资 char addr[100]; 〃地址 char telep[15];〃 电话 struct teacher *n ext;

}*head=NULL;

主函数只进行口令函数和菜单栏函数的调用, 主要工作通过菜单函 数实现。

口令为 123456。

菜单栏函数通过用 switch 语句实现不同功能的选择, 不同的功能用 不同的子函数实现。

录入教师信息通过建立动态单链表来实现。

浏览教师信息则通过将链表所有数据顺序输出来实现。 查询功能只要从链表头开始不断往下一个结点读取信息跟所要查 找的信息比较,直到读取到的信息跟所要查找的信息相同或链表尾为 止,并把此结点的信息输出。

删除教师信息的函数是通过查找链表中有该信息的结点后将该结 点移出链表,即使该结点前一个结点直接指向该结点后面的结点来达 到删除信息的目的。

排序函数是通过交换结点在链表中的位置来实现的,即使得各结 点在链表中的位置便是所要得到的排序该信息应在的位置,这样直接 顺序输出链表的信息时就能按所要的排序输出了。

.程序的N—S图

2.1总程序的N—S图

说明:各功能都是通过调用子函数来实现的。

2.2各子函数的N — S图

子函数主要包括教师信息录入,教师信息浏览,教师信息删除, 教师信息查询和教师信息排序等 5个。在退出系统时调用了一个保存 信息到文件中的函数,该函数只是简单的应用了文件的读写功能,在

此不写出其N—S图

2.2.1教师信息录入函数

p仁(struct teacher *)malloc(LEN) 输入一个教师号 p1->num 教师号^0? ________________________ —— ^^F 链表头为空^ ---------------------- Head =p1 p3=head 当p3->next不为空 p3=p3->n ext p3->n ext=p1 当教师号不为0 输入教师的姓名,性别,年龄,学历,职称,月薪,住址, 电话 n=n+1 ~ head=p1 录 一一^V p2->n ext=p1 p2=p1 p仁(struct teacher *)malloc(LEN) 输入一个教师号 p1->num p2-> next=NULL 说明:p仁(struct teacher *)malloc(LEN)中LEN是在程序开头的宏 定义(#define LEN sizeof(struct teacher)。其中n为全局变量,用来统 计链表的结点数,以下出现的n都是同一个。

2.2.2教师信息浏览函数

p=head 链表头为空^ ------------------------- ------ 显示“还 输出p所指向的位置中的教师的所有信息 未录入 过信息” p=p->n ext 直到p为空 说明:实际程序中在链表头为空是提供了可以浏览之前保存在文 件中的信息的功能,当选择该功能时就调用了一个读取文件的函数。 该函数只是对文件读写的简单应用,详细请看后面第三部分代码,这 里不写出其N-S图。

未入教信录过师雷p仁head

当 i!=p1->num p1->next 为空? ------------ ----------- 退出 p2=p1 p1=p1- >n ext 4!=p1->num?_ 一 ---------- ------------ _______ 循环

输出“已录入

的教师信息 中没有该教 师号”

2.2.4教师信息查询的函数

T

1为链表

F

head=p1- >n ext p2->n ext=p1- >next

n=n-1

在查询方面程序为用户提供了 4种不同方式的查询,每一种方式 的查询为一个子函数,此时也是采用一个菜单栏函数进行选择查询方 式并调用该种方式的函数。菜单栏函数跟主程序菜单栏的算法一样,

此处只给出查询函数的N—S图

说明:该N—S图是对应姓名,教师号,职称,年龄四种查找方式 的函数的。当选择教师号查找时,输入i的即为教师号,与i做比较的 为p中的教师号,选择其他查找方式时类似。

225教师信息排序函数

排序也跟查询一样给出多种排序方式并采用菜单栏函数,此处也只 给出排序函数的N — S图。

链表头不为空^F

输出“还未录入过教师信息”并退出函数 卞、第二个结点为空 ------------------- F p仁head

p2=head->n ext i=1

当i小于n时

j=0 当j小于n-i时 中的对应信息小^p2的?,- p3=p1 head=p2 p仁p2 为链表头^ p3->n ext=p2 p4=p2->n ext p2->n ext=p1 p2=p2- >n ext p1- >n ext=p4 P3=p2 p2=p4 p仁head p2=p1- >n ext

调用教师信息浏览函数

说明:p1,p2指向的结点用来比较,p3, p4是用来记录结点的,当选用的排 序方式不同,

p1,p2用来比较的信息为所选方式的信息。

三.源程序代码

#include #include #include #include

#defi ne LEN sizeof(struct teacher)/宏定义结构体字节数 int n=0; struct teacher//定义结构体

{

long nu m;〃教师号 char name[20];〃姓名 char sex [5];//性 性别 int age;//年龄 char edu[20];//学 历 char title[20];// 职称 long wage;//工资 char addr[100];〃 地址 char telep[15];〃 电话

struct teacher *n ext;//指向下一个结点 }*head=NULL; void key()// 口令检查的函数

{

int i; long a; for(i=0;i<3;i++)

{

printf(\"请输入口令(还可输入%d次):\\n\if(a==123456)〃检查口令是否正确

{

printf(\" 欢迎进入系统 \\n\"); break;

}

else printf(\" 口令错误 \\n\");

}

if(i==3)〃判断可以输入口令的次数是否用完

{

printf(\"可使用的口令输入次数已用完,将自动退出! exit(0);

}

\\n\");

}

void save()〃把数据存入文件的函数

{

FILE *fp; int i;

char filename[20]; struct teacher *p; printf(\"\\n

是否把此次登录系统录入和修改后的教师信

息保存到文件中 \\n\");

printf(\"

1:【是】

0:【否】 \\n 请选择: \");

scanf(\"%d\

while((i!=0)&&(i!=1))// 判断输入的选择是否有效

{

printf(\" 选择无效,请重新输入正确选项: \"); scanf(\"%d\

}

if(i==1)// 判断是否选择了要保存

{

printf(\"\\n 请输入要保存数据的文件名: \"); scanf(\"%s\if((fp=fopen(filename,\"wb\"))==NULL)

{

printf(\"\\n 无法打开文件 \\n\"); exit(0);

}

for(p=head;p!=NULL;p=p->next) if(fwrite(p,sizeof(struct

teacher),1,fp)!=1) printf(\"\\n 此处数据有误 \\n\"); fclose(fp);

}

exit(0);

}

void read()〃从文件读出数据的函数

{

struct teacher teach[299],temp; int i=0; FILE *fp;

char filename[20];

printf(\"\\n 请输入存有教师信息的文件名: \"); scanf(\"%s\

if((fp=fopen(filename,\"rb\"))==NULL)

{printf(\"\\n 无法打开文件 \\n\");

exit(0);

}

fseek(fp,-sizeof(struct teacher),2);/*将位置指针从文件末尾后退 一个结

构体的字节数 */

fread(&temp,sizeof(struct teacher),1,fp);/* 从所指向的文件中读 出数据

存储到结构体变量temp中*/

fseek(fp,O,O);〃将位置指针移到文件的开头

if(fread(&teach[i],sizeof(struct teacher),1,fp)==1)/* 判断文件开头 读入

的数据是否为空 */

{

printf(\"\\n 存有的教师信息如下 :\\n\");

while(teach[i]. num!=temp .n um)〃 进行循环读取文件

{

printf(\"教师号:%ld,姓名:%s,性别:%s年龄:%d,学

历:%s,\

printf(\"职称:%s\\n

月薪:%ld,住址:%s,电

话:%s\\n \

i=i+1;

fread(&teach[i],sizeof(struct teacher),1,fp);/* 从文件中读

入数据存储到结构体变量teach【i】中*/

}

//输出文件中的最后一个信息

printf(\"教师号:%ld,姓名:%s,性别:%s,年龄:%d,学

历:%s,\

printf(\"职称:%s\\n

月薪:%ld,住址:%s,电

话:%s\\n \

}

else printf(\"该文件中无教师信息\\n\");〃文件为空时输出此处

}

void creat()〃录入教师信息的函数

{

struct teacher *p1,*p2,*p3;

p1=p2=(struct teacher *)malloc(LEN);/* 申请一个结构体字节数 的空间

用来存储一个教师的信息 */

printf(\" 请输入一位教师的教师号(结束录入请输入 scanf(\"%ld\

if(p1-> num!=0)〃判断用户是要结束录入还是要存储信息

if(head==NULL) head=p1;/*判断链表是否为空,是则将链表 头指

0):\");

向 p1*/

else //链表不为空则将链表尾指向

p1

{

p3=head;//p3用来记录链表的尾部

while(p3->next!=NULL)/*若p3不是链表尾则将p3指向 下一

个结点 */

p3=p3->next;

p3->next=p1;〃将最后一个结点指向pl

}

while(p1-> num!=O)〃判断用户是否结束录入功能

{

//录入该教师号的教师对应的信息

printf(\"姓名:\"); scanf(\"%s\性别: \"); scanf(\"%s\年龄: \"); scanf(\"%d\printf(\" 学历: \"); scanf(\"%s\职称: \"); scanf(\"%s\月薪: \"); scanf(\"%ld\printf(\" 住址: \"); scanf(\"%s\电话: \"); scanf(\"%s\

n=n+1;//给统计录入的教师数n加一

/*判断是否为第一个录入的信息,是则将链表头指向 p2指向p1*/

if(n==1) head=p1; else p2->next=p1;

p2=p1;//p2用来记录链表的最后一个结点 p仁(struct teacher *)malloc(LEN);〃 重新申请空间

pl,否则将

printf(\"请输入一位教师的教师号(结束录入请输入0):\"); scanf(\"%ld\

}

p2->next=NULL;〃将最后一个结点指向空

}

void print()// 输出教师信息的函数

{

struct teacher *p; int i; p=head;

if(head!=NULL)// 判断链表是否为空

{

printf(\"\\n这%d位教师的信息为:\\n\do

{

printf(\"教师号:%ld,姓名:%s,性别:%s年龄:%d,学历:%s,

职称:%s\\n\

prin tf(\"

月薪:%ld,住址:%s,电

话:%s\\n\

p=p->next;// 将下一个结点的首地址赋给 p }while(p!=NULL);// 到链表尾时结束循环

}

else//链表为空时执行以下部分

{

printf(\"\\n 你此次登录系统还没有录入教师信息,可进行以 下操

作: \\n\");

printf(\"

2:【开始录入教师信息】 \\n\");

printf(\"

4:【返回菜单】 \\n\");

printf(\" 请选择: \"); scanf(\"%d\while((i<1)&&(i>4))

{

1:【浏览以前保存在文件中的教师信息】

3:【退出系统】

printf(\" 选择无效,请重新输入正确选项: \"); scanf(\"%d\

}

if(i==1) read();〃调用从文件读取数据的函数

if(i==2) creat();〃调用录入信息的函数 if(i==3) exit(0);// 退出系统

}

}

void del()//删除教师信息的函数

{

struct teacher *p1,*p2; long i;

if(head==NULL)// 判断链表是否为空

{

printf(\"\\n 还未录入过教师信息 \\n\");// 链表为空时输出 return;

}

printf(\" 请输入要删除教师信息的教师号: \"); scanf(\"%ld\p1=head;

while(i!=p1->num)// 直到 p1 指向的结点是要删除的信息位置

{

if(p1->next==NULL) break;//p1 的下个结点为空则退出循环 p2=p1;//p2用来记录pl的前一个结点 p1=p1->next;//p1 指向下一个结点

}

if(i==p1->num)// 判断 p1 是否为要删除的信息

{

if(p1==head) head=p1->next;/*若pl为头结点则将头指针指

向 p1 的下一个结点 */

else p2->next=p1->next;/*p1 非头结点则将 p1 后面的结点连

接到 p1 前一个结点的后面 */

printf(\"\\n 已删除教师号为 %ld 的教师信息 \\n\

}

n=n-1;//记录教师数的n要减一

//p1 不是要删除的信息则表示要删除的信息不再链表中

else printf(\"\\n已录入的教师信息中没有教师号为 %ld的\\n\

}

void sort1()〃按教师号进行排序的函数

{

struct teacher *p1,*p2,*p3,*p4; int i,j;

if(head==NULL)

{printf(\"\\n 还未录入过教师信息 \\n\"); return;

}

if(head->next!=NULL) // 判断是否只有一个信息 {//用冒泡法排序

p仁head;//p1记录用来比较的两个结点中的前面一个 p2=head-> next;//p2记录比较的两个结点中的后面个 for(i=1;i{

for(j=0;jnum>p2->num)/* 比较相邻两个结点中教师 号大

小 */

{//当pl的教师号大时则对调两个结点的位置

if(p1==head) head=p2;

else p3->next=p2;/*p1 为头结点时则将头指针

指向p2,否则就将p2连接到用来记录pl前一个结点的p3的后面*/

p4=p2->next;//p4用来记录p2后面的结点

p2->next=p1;//p1的结点换到原来p2的位置 p1->next=p4;〃原来p2后面的结点连接到pl p3=p2;//p3 记录下 p2 的位置

p2=p4;//p2 指向原来位置的下一个结点

}

else/*p1中教师号没有打过p2中教师号,则将p1, p2 都

指向它们各自位置的下一个结点 */

{

p3=p1;〃记录pl后移一位后它前个结点的位置 p1=p2; p2=p2->next;

}

}

p1=head;//p1 指向链表头,开始下一趟外循环的准备 p2=p1-> next;//p2指向链表第二个结点

}

}

printf(\"\\n 按教师号排序后的教师信息如下: \\n\"); prin t();〃调用教师信息浏览函数

}

void sort2()//按月薪排序的函数,算法跟按教师号排序的一样

{

struct teacher *p1,*p2,*p3,*p4; int i,j;

if(head==NULL)

{

printf(\"\\n 还未录入过教师信息 \\n\"); return;

}

if(head->next!=NULL)

{

p1=head; p2=head->next; for(i=1;i{

for(j=0;j{

if(p1->wage>p2->wage)

{

if(p1==head) head=p2; else p3->next=p2; p4=p2->next; p2->next=p1;

p1->next=p4; p3=p2; p2=p4; else

{

p3=p1; p1=p2;

}

p2=p2->next;

}

}

p1=head; p2=p1->next;

}

}

printf(\"\\n 按月薪排序后的教师信息如下: \\n\"); print();

}

void sort3()〃按年龄排序的函数,算法跟按教师号排序的一样

{

struct teacher *p1,*p2,*p3,*p4; int i,j;

if(head==NULL)

{

printf(\"\\n 还未录入过教师信息 \\n\"); return;

}

if(head->next!=NULL)

{

p1=head; p2=head->next; for(i=1;i{

for(j=0;j{

if(p1->age>p2->age)

{

if(p1==head) head=p2; else p3->next=p2; p4=p2->next; p2->next=p1; p1->next=p4; p3=p2; p2=p4;

}

else

{

p3=p1; p1=p2; p2=p2->next;

}

}

p1=head; p2=p1->next;

}

}

printf(\"\\n 按年龄排序后的教师信息如下: \\n\"); print();

}

void choose1()〃选择排序方式的函数

{

int i; printf(\" printf(\"

1【: 按教师号排序】

按年龄排序】 \\n\");

printf(\"

3:【按月薪排序】 \\n\");

printf(\"请选择:\"); scanf(\"%d\

while((i<1)||(i>3))

{

printf(\" 选择无效,请重新输入正确选项:scanf(\"%d\

}

switch(i)

{

case 1:sort1();break; case 2:sort3();break;

}

排序方式 \\n\");

2:

\");

case 3:sort2();break;

}

}

void search1()〃按教师号查找的函数

{

struct teacher *p;

long i;〃存储用户输入的想要删除的教师号 if(head==NULL)

{

printf(\"\\n 还未录入过教师信息 \\n\"); return;

}

printf(\" 请输入要查找的教师信息的教师号: \"); scanf(\"%ld\

for(p=head;p!=NULL;p=p->next)

//p 顺序指向结点与 i 比较,找出有 i 的数据的结点并输出 if(p->num==i)

{

printf(\"教师号:%ld,姓名:%s,性别:%s,年龄:%d,学

历:%s,职称:%s\\n\

prin tf(\"

月薪:%ld,住址:%s,电

话:%s\\n\

return;

}

printf(\" 已录入的教师信息中不存在该教师号 \\n\");

}

void search2()〃按姓名查找的函数

}

{

struct teacher *p;

char i[20];〃记录用户输入的想要删除的姓名

int j=0;//j 用来记录找到了多少个信息 if(head==NULL)

{

printf(\"\\n 还未录入过教师信息 \\n\"); return;

}

printf(\" 请输入要查找的信息的教师姓名: \"); scanf(\"%s\for(p=head;p!=NULL;p=p->next) if(strcmp(p->name,i)==0) //比较 p 指向的结点中的姓名跟 i 的是否一致,是则输出

{

printf(\"教师号:%ld,姓名:%s,性别:%s,年龄:%d,学

历:%s,职称:%s\\n\

prin tf(\"

月薪:%ld,住址:%s,电

话:%s\\n\

j=j+1;〃每输出一个教师的信息则j加一

}

if(j==0) printf(\" 已录入的教师信息中不存在该姓名的教师 \\n\");

}

void search3()〃按职称查找的函数,算法与按姓名查找的一样

{

struct teacher *p; char i[20]; int j=0;

if(head==NULL)

{

printf(\"\\n 还未录入过教师信息 \\n\"); return;

}

printf(\" 请输入要查找的信息的教师职称: \"); scanf(\"%s\for(p=head;p!=NULL;p=p->next) if(strcmp(p->title,i)==0) {

printf(\"教师号:%ld,姓名:%s,性别:%s,年龄:%d,学 历: % s ,职

称: % s\\n \" , p->num , p->name , p->sex , p->age , p->edu , p->title);

prin tf(\"

月薪:%Id,住址:%s,电

话:%s\\n\

j=j+1;

}

if(j==0) printf(\" 已录入的教师信息中不存在该职称的教师 \\n\");

}

void search4()〃按年龄查找的函数,算法与按教师号查找的一样

{

struct teacher *p; int i,j=0;

if(head==NULL)

{

printf(\"\\n 还未录入过教师信息 \\n\"); return;

}

printf(\" 请输入要查找的信息的教师年龄: \"); scanf(\"%d\); for(p=head;p!=NULL;p=p->next)

if(p->age==i)

{

printf(\"教师号:%ld,姓名:%s,性别:%s,年龄:%d,学历:%s,

职称:%s\\n\);

prin tf(\"

月薪:%Id,住址:%s,电

话:%s\\n\);

j=j+1;

}

if(j==0) printf(\" 已录入的教师信息中不存在该年龄的教师 \\n\");

}

void choose2()〃选择查找方式的函数

{

int i; printf(\" printf(\"

2:【按姓名查询】 \\n\");

printf(\"

3:【按职称查询】 1:【按教师号查询】

查询方式 \\n\");

4:【按年龄查询】 \\n\"); printf(\" 请选择: \"); scanf(\"%d\

while((i<1)||(i>4))

{

printf(\" 选择无效,请重新输入正确选项: \"); scanf(\"%d\

}

switch(i)

{

case 1:search1();break; case 2:search2();break; case 3:search3();break; case 4:search4();break;

} }

void menu()// 菜单栏函数

{

int i;

printf(\"

printf(\"

教师信息输出】 \\n\");

printf(\"

查询个人信息】 \\n\");

printf(\"

【: 教师信息录入】【: 教师信息删除】【: 排序】

菜单\\n\");

2

4

6

1

3

5

退出系统】 \\n\");

printf(\" 请选择 : \"); scanf(\"%d\while((i<1)||(i>6))

{

printf(\" 选择无效,请重新输入正确选项:}

switch(i)

{

case 1:creat();break; case 2:print();break; case 3:del();break; case 4:choose2();break; case 5:choose1();break; case 6:save();

}

menu();

}

void main()// 主函数

{

key(); menu();

}

\"); scanf(\"%d\

四.程序运行效果图

4.1登陆界面

4.2菜单栏

■ E; i堆持序调昜叶厉WebugXJDlO豹斗L24fe^#iJjexe*

23456

[[¥什

[ 开 ,詳丰-

^询出 帅$H

4.3录入功能

・• EF廊序锻逞法:ti貝0旳朗\\201二3141?^ 金利盹 荒单 t書II豔铝 土離盘秋师的斯号垢审 就请辙人目八2 丁务除荃 珈S ' 龄'23

V: 3丽R I:脚卞ftW&U—路丄垛 yiff2息 33出一L=

输人一检教师的教师号<姑克录入请输人《): « 菜单 ±)ili: _ 仁人息统 賈 息击C 3J4.4浏览功能

|.=」冋 jhjr 'E?源弓序诈逞蓟亠巧 工bug\\?C 133二324片舍f!唤' 耳甘I 3423421?234 谒输人一亡投血的數1帀号t结重录Ai謹Lt叱? 意出 人歐统

,乌话:34234233 234 ::嘶 6=【貝岀奈 统】 翳翩 H,鲁孵闕 t&li:. -i.j

4.5删除功能

4.6查询功能

4.7排序功能

> * E:lJS&^^,ffl^i+\\5\\Debuq\\20103 IA12A !1.HK# *

亠录讯 n - ¥ 1,序— 孑 棘序方式 ■-..'碰 三 ■ “电盍 T白夕X& 儈_ 訊番M电诃3曲师3L4干 ■r昨甲歹 =土^ _帀 賊_:-EE影 .﹄I.-:羽13 一话._ 篇 4 □i -衣〒蹙天n7一 -:• 私茸=4 酩^5234 mull m fJ爲 AU価宥耶 删验师lr右素 层出翻 裁 人息 科攝古匸出&统 鸟呗即叽tX

五.总结报告

5.1 课程设计中遇到的主要问题和解决方法

在这次的 C 语言课程设计的编程中,由于以前对链表和文件这两 部分的内容了解过少,因此在编程中涉及到这两方面的内容时,照成 了很大的阻碍,最主要是在对链表的结点进行交换,对文件某些特殊 的读写不清楚。而且由于第一次接触这类比较复杂一点的题目,在循 环方面的应用有所不足,这也是一个问题。

在遇到这些问题时,对于每一个问题在实在无思路时,我首先会 查阅相关的书籍,像文件中末尾读起的方法,在通过查看 C 语言的书 后我才知道原来有专门的库函数可以用;在查阅完书籍确定该了解的 基本内容已了解之后, 自己再重新思考算法, 然后不断的在 VC++ 中调 试,根据它的提示修正错误,直到编译无错且运行的结果正确为止。

5.2 你的创新和得意之处 这个教师信息管理系统不仅按要求可以让用户自

己选择要实现录 入,浏览,查找,删除,排序中的任一种功能,而且在退出系统时为 用户提供能是否要保存该次的信息到文件中的选择。且在浏览中当检 查到用户该次登录还未录入过信息时,提供了是否要查看以前保存的 文件的功能。

5.3 设计中存在的不足及改进的设想

在设计过程中,由于对 C 语言的理解不够透彻,特别是链表和文 件方面边查书边调试才写出来的,所以导致程序在一定程度上的不严 密,例如浏览其他文件的信息只有在检测到该次登录还未录入过信息 时才会提供用户选择之类的。当然,最主要的原因是由于第一次接触 这种较复杂点的题目,在算法的设计上不好,才导致程序过于冗长不 严谨的。程序在查找和排序时其实可以不用每种方式都写一个函数的, 这样程序就不会显得过于冗长。而且系统提供功能选择方面也可以再 调整的更完善。

5.4 本次课程设计的感想和心得体会 从拿到题目到完成的三周时间里,我

了解到了原来在 C 语言的方 面的应用我所存在的不足,更掌握了很多之前不懂的知识。在此次的 课程设计中,刚接触到题目时我就发觉了一个被我遗忘了的严重问题, 那就是编程的能力只有通过不断敲写代码才能保持和提高的。由于过 长时间没有写过代码的缘故,在拿到以前已经编过的简单题目时我也 得查找书籍才最终编写完成,这重新提醒了我在编程方面实践的重要。

由于第一次拿到设计一个系统这样比较复杂的题目,尽管最后设 计出来的系统很简单,当中间我所遇到的问题还是很多,甚至比学 C 语言时做过的所有题目遇到的还多。因此在编程时我几乎又把 C 语言 的整本书重新看了一遍,有了更深刻的认识。另外,在这次的编写中, 我了解到了以前所未了解的一个很重要的地方,就是设计算法的能力。 因为以前所接触的题目都比较简单,所以没有专门想过设计算法,跟 没有意识到其重要性,这次的题目让我明白了要编写出一个好的程序, 设计一个好的算法是非常必要的。由于开始我在设计算法方面的意识 不足,导致这次写出来的代码很累赘很繁琐,这时非常不好的。另外, 我发现细节的注意不管是多熟悉编程了都很必要的,即使到最后快完 成的时候我也会犯下缺函数的括号,语句缺冒号之类的小错误。

虽然这次完成题目的结果不太好,但能够自己独立完成还是带给 了我很大的喜悦。这次课程设计使我意识到自己的多处不足,让我有 机会去改进,为以后的编程之路打好基础,以后我还会自己多些找题 目来实践,以提高我的能力。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务