您的当前位置:首页正文

C语言程序设计-职工信息管理系统(链表)

2021-08-10 来源:品趣旅游知识分享网


信息与电子工程学院

C语言课程设计

职工信息管理系统设计

实验日期和时间: 2011年06月27日-06月29日 实验类别:课程设计 实验类型:设计性

一、 实验环境

操作系统:windows xp

编程工具:Microsoft Visual C++ 6.0 开发环境:CPU(Inter(R)Core(TM)2 Quad cpu QB200 @ 2.33GHz) 内存:2.76GB 硬盘:228.3GB

开发地点:现代教育中心201机房A17座 IP:10.250.11.17

二、实验目的和要求

实验目的:

(1)使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、

存储结构和操作算法。

(2)使学生进一步掌握程序设计、编写、调试能力。 (3)使学生了解软件开发的基本步骤和内容。

实验要求:

完成一个职工信息管理系统程序,具体内容如下:

(1)在内存中用链表记录,在硬盘上用二进制文件保存。

(2)设计完的程序能够以命令行或者菜单形式增加、删除、更新和查询数据的内容。数据内容能够排序以方便查询。 (3)数据库中应该有至少20条记录。

三、实验内容和结果

(1)程序整体功能;

1、系统总体框

开始 菜单 根据菜单输入n的值选择程序 1 录入职工信息 2 修改职工信息 3 浏览职工信息 4 分类查找职工信息 5 删除职工信息 6 从文件读取信息 0 退出 按职工号查找 按姓名查找 Y 是否继续进行 N 结束

2、模块设计

该程序主要分为7个模块,分别是创建与添加模块、显示模块、查找模块、修改模块、删除模块、存档模块、文件统计模块、退出模块

(2)程序组成及各模块/函数功能;

创建与添加模块:该模块的功能是输入职工信息。函数为void Add(Node *woker)

原理:采用尾插法,先建立链表与头结点,新增一个结点,键盘输入职工号、职工姓名、职工性别、职工出生年月、职工学历、职工职位、职工工资,将这些信息存储到新增结点中,将新增加的节点连到链表的尾端,如此以往,将尾结点的指针域置空,这样就得到了一条存储职工信息的链表,这样就完成了职工信息的创建与增加。

显示模块:该模块功能是显示职工信息。函数为void Disp(Node *woker) 原理:先新建一个指针P指向头结点,判断它的指针域是否为空,若为空,则输出“没有记录可以显示”;若不为空,则输出它的指针域所指向节点所储存的职工信息,并将该指针向后移一个结点,直到P指向空,即输出了所有职工的信息,这样就完成了所有职工信息的显示。

查找模块:该模块功能是查找职工信息。函数为void Tongji(Node *woker) 原理:该模块分为两种查找方法,分别是按职工号查找和按职工姓名查找,因为这两种查找方法雷同,所以这里将只解释按职工号查找的原理。先键盘输入一个要查找的职工号并新建一个指针P指向头结点,判断它的指针域是否为空,若为空,则输出“没有资料可以统计分类”,若不为空,则判断它的指针域所指向节点所储存的职工信息中的职工号,若相等,则输出这个职工的其他所有信息,并将P指向下一个结点,再次进行判断,直到P指向空,即输出了所有查找到的信息。若不相等,则P指向下一个结点,再次进行判断,直到P指向空,即输出了所有查找到的信息,这样就完成了职工信息的查找。

修改模块 :该模块功能是修改职工信息。函数为void change(Node *woker) 原理:根据查找原理,查找到要修改信息的职工,删除这一节点,并新建一

个节点,键盘输入想要修改的内容,并储存到新的结点中,将新的节点连接到链表中原先删除结点的位子,这样就完成了职工信息的修改。

删除模块:该模块功能是删除管理职工信息。函数为void dismiss(Node *woker)

根据查找的原理,查找到要修改信息的职工,删除这一节点,并将其前驱结点的指针域指向其后继结点,这样就完成了职工信息的删除。

存档模块:将内存中的信息存储到文件中。函数为void save(Node *woker) 原理:打开文件,新建一个指针P指向头结点,判断它的指针域是否为空,若为空,则输出“无记录”,若不为空,则将这个职工的所有信息输入到文件中,并将P指向下一个结点,直到P指向空,即输入了的信息,

文件统计模块:打开文件,统计职工数目,并输出。函数为void load(Node *woker)

退出模块:该模块功能是退出管理档案。

(3)重要数据结构,重要模块/函数算法;

1:创建与添加模块:

void Add(Node *woker) //添加记录 {

Node *p,*r,*s;

char n[10]; //先用于输入职工号,也用于判断是否跳出循环

r=woker;

s=woker->next; //使s为第一个有用的结点

while(r->next!=NULL) //这个循环的作用是使r为最后一个有用的结点

r=r->next; //将指针置于最末尾 while(1) {

printf(\">>>>>>>>>>提示:输入0则返回主菜单!\\n\"); printf(\"\\n请你输入职工号:\"); scanf(\"%s\

if(strcmp(n,\"0\")==0) break; p=(Node *)malloc(sizeof(Node)); //申请空间 strcpy(p->data.num,n); printf(\"\\n请输入姓名:\");

scanf(\"%s\

printf(\"\\n请输入性别:\"); scanf(\"%s\

printf(\"\\n请输入出生年月:\"); scanf(\"%s\ printf(\"\\n请输入学历:\"); scanf(\"%s\ printf(\"\\n请输入职位:\"); scanf(\"%s\ printf(\"\\n请输入工资:\"); scanf(\"%s\

printf(\">>>>>>>>>>提示:已经完成一条记录的添加。\\n\"); p->next=NULL;

r->next=p; //这一步是必需的,将p与先前的链表连起来构成一条新链表

r=p; //也是必需的.将r 又重设为新链的最后一个有用结点 } }

2:显示模块

void Disp(Node *woker) //输出职工信息 {

Node *p;

p=woker->next; if(!p) {

printf(\"\\n>>>>>>>>>>提示:没有记录可以显示!\\n\"); return; }

printf(\"\\\\显示结果\\n\");

printf(\"职工号 职工姓名 职工性别 职工生日 职工学历 职工职位 职工工资\\n\"); while(p) {

printf(\"\\n%-13s%-11s%-7s%-10s%-13s%-10s%-5s\\n\data.birthday,p->data.degree,p->data.position,p->data.salary); p=p->next; } }

3:查找模块

void Tongji(Node *woker) //查找统计函数 {

Node *p;

int sel;int flag2=0,ha=0;

p=woker->next; char find[20]; if(!woker->next) //若链表为空 {

printf(\"\\n>>>>>>>>>>提示:没有资料可以统计分类!\\n\"); return; }

printf(\">>>>>>>>>>提示:\\n=====>0退出\\n=====>1按职工号统计\\n=====>2按职工姓名名称统计\\n\");

scanf(\"%d\if(sel==1) {

printf(\"\\n输入你要统计分类的职工号:\"); scanf(\"%s\ while(p) {

if(strcmp(p->data.num,find)==0) {

flag2++; }

if(flag2==1&&ha!=flag2)

{ printf(\"职工号 职工姓名 职工性别 职工生日 职工学历 职工职位 职工工资\\n\");

printf(\"\\n%-13s%-11s%-7s%-10s%-13s%-10s%-5s\\n\data.birthday,p->data.degree,p->data.position,p->data.salary); ha=flag2; } else

if(flag2>ha){printf(\"\\n%-13s%-11s%-7s%-10s%-13s%-10s%-5s\\n\>data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary);ha=flag2;} p=p->next; }

if(flag2) {

printf(\"\\n*************************按设备号%s统计分类的有%d条记录:*************************\\n\\n\ }

else {printf(\"\\n按职工号%s统计的结果为0个\\n\\n\}

else if(sel==2) {

printf(\"\\n输入你要统计分类的职工姓名:\"); scanf(\"%s\

while(p) {

if(strcmp(p->data.name,find)==0) {

flag2++; }

if(flag2==1&&ha!=flag2)

{ printf(\"职工号 职工姓名 职工性别 职工生日 职工学历 职工职位 职工工资\\n\");

printf(\"\\n%-13s%-11s%-7s%-10s%-13s%-10s%-5s\\n\data.birthday,p->data.degree,p->data.position,p->data.salary); ha=flag2; } else

if(flag2>ha){printf(\"\\n%-13s%-11s%-7s%-10s%-13s%-10s%-5s\\n\>data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary);ha=flag2;} p=p->next; }

if(flag2) {

printf(\"\\n******************按设备名称%s统计的有%d条记录:********************\\n\\n\ }

else {printf(\"\\n按职工姓名%s统计分类的结果为0个\\n\\n\}

else if(sel==0) return; }

4:修改模块

void change(Node *woker) //修改职工信息函数 {

Node *p; char find[20]; if(!woker->next) {

printf(\"\\n>>>>>>>>>>提示:没有资料可以修改!\\n\"); return; }

printf(\"请输入要修改的职工号:\"); scanf(\"%s\

p=woker->next; while(p!=NULL) {

if(strcmp(p->data.num,find)==0) //如果找到的话返回的是符合要求

break; p=p->next; }

if(p) {

int x; while(1) {

printf(\"完成修改请输入0否则输入任意数再进行修改:\"); scanf(\"%d\ if(x==0) {break;}

printf(\"请输入新职工号(原来是 %s ):\ scanf(\"%s\

printf(\"请输入新职工姓名(原来是 %s ):\ scanf(\"%s\

printf(\"请输入新职工性别(原来是 %s ):\ scanf(\"%s\

printf(\"请输入新出生年月(原来是 %s ):\ scanf(\"%s\

printf(\"请输入新职工学历(原来是 %s ):\ scanf(\"%s\

printf(\"请输入新职工职位(原来是 %s ):\ scanf(\"%s\

printf(\"请输入新职工工资(原来是 %s ):\ scanf(\"%s\

printf(\"\\n>>>>>>>>>>提示:该项记录资料已经成功修改!\\n\"); } }

else printf(\"\\n>>>>>>>>>>提示:你要修改的信息不存在!\\n\"); }

5:删除模块

void dismiss(Node *woker) //删除职工信息函数 {Node *p,*r,*s; char find[10]; if(!woker->next) {

printf(\"\\n>>>>>>>>>>提示:没有资料可以显示!\\n\"); return; }

printf(\"\\n>>>>>>>>>>提示:请输入您要删除的职工号!\\n\"); scanf(\"%s\p=woker->next; while(p!=NULL)

{

if(strcmp(p->data.num,find)==0) //如果找到的话返回的是符合要求 break; p=p->next; } if(!p)

printf(\"\\n>>>>>>>>>>提示:找不到您想删除的职工号!\\n\"); else

{r=woker;

while(r->next!=p) r=r->next; s=r->next;

r->next=r->next->next; } }

6:存档模块

void save(Node *woker) //将职工信息保存到文件 { int n; Node *p; FILE *fp; //指向文件的指针 printf(\"需要保存吗?(1-保存 0-不保存)\"); scanf(\"%d\ if(n) { if(woker->next==NULL) printf(\"无记录\"); else p=woker->next; if((fp = fopen(\"职工管理系统.dat\打开文件,并判断打开是否正常 printf(\"can not open file\\n\"); // 打开文件出错 while(p!=NULL) {

fprintf(fp,\"%s %s %s %s %s %s %s\day,&p->data.degree,&p->data.position,&p->data.salary); p=p->next; }

fclose(fp); //关闭文件 } }

7:文件统计模块

void load(Node *woker) {Node *p,*q;

FILE *fp; //指向文件的指针 int recordNum; // 统计记录数

if((fp = fopen(\"职工管理系统.dat\ //打开文件 {

printf(\"can not open file\\n\"); //不能打开 }

p=woker;

recordNum = 0; while(!feof(fp))

{q=(Node*)malloc(sizeof(Node)); fscanf(fp,

\"%s %s %s %s %s %s %s\e,p->data.position,p->data.salary);/*从文件读入记录*/ p->next=q;

q->next=NULL; p=q;

recordNum++; }

fclose(fp);

printf(\"文件里共有%d条记录:\\n\}

8:主函数模块 void main() {

Node *woker; FILE *fp; int flag; Node *p,*q;

printf(\"\\\\职工信息管理系统\\n\"); woker=(Node*)malloc(sizeof(Node)); woker->next=NULL; p=woker; while(1) {

printf(\"**************************************目录**************************************\"); printf(\"\\n1添加记录\\n\"); printf(\"\\n2修改记录\\n\"); printf(\"\\n3浏览记录\\n\"); printf(\"\\n4分类查找记录\\n\"); printf(\"\\n5删除记录\\n\");

printf(\"\\n6从文件读取记录\\n\");

printf(\"\\n0*-EXIT-*\\n\");

printf(\"请输入你要操作的序号:\"); scanf(\"%d\ switch(flag) {

case 0: printf(\"\\n>>>>>>>>>>提示:已经退出系统,ByeBye!\\n\");break; case 1: Add(woker);save(woker);break; //增加记录 case 2: change(woker); break; //修改记录 case 3: Disp(woker); break; //显示记录信息 case 4: Tongji(woker); break; //查找记录 case 5: dismiss(woker); break; //删除记录 case 6: load(woker); break; //读取记录 default: printf(\"\\n>>>>>>>>>>提示:输入错误!\\n\"); break; } } }

(4)程序的运行和测试结果

主界面:

创建与增加模块:

输入职工信息为:

职工姓职工性

职工号

名 别

1 A f 2 B m 3 C f

职工出生年

月 11 22 33 职工学历 aa bb cc 职工职位 a b c 职工工资 1000 2000 3000

4 D 输入第一次时:

m 44 dd d 4000

输入第二次时:

输入第三次时:

输入第四次时:

显示模块:

输入四次后显示的结果为:

存档模块:

文件统计模块:

查找模块:

输入查找职工号为3的职工信息:

输入查找职工姓名为c的职工信息:

修改模块:

修改职工号为3的职工信息为:

职工姓职工性职工出生年

职工号

名 别 月

5 E f 55

职工学

历 ee 职工职位 e 职工工资 5000

职工信息变成:

删除模块:

删除职工号为5的职工信息:

删除后的结果为:

退出模块:

四、实验中的问题及心得

此次实践课编写的是一个应用程序,相对于以前我们见到的程序,它要大得多,运行的结果也没有预想中的好,数据的输出格式不太规范,而且各模块也出现了一些小问题,在老师和同学的帮助下,我很有耐心的一次又一次的进行修改,最后运行的结果基本上达到了预期的目的。

本次C 语言的实习课让我对C 语言的学习又有了更深入的了解,也让我更深刻地领悟到了“实践出真理”这个道理,在上机实践过程中学到的知识远远超过了在课堂上十几周学到的,这次程序设计课让我增添了许多程序设计经验,为我们将来走上工作岗位其了不小的铺垫作用。

本次实习中遇到了很多以前没有遇到过的问题,也曾想过要放弃,但看到那些同学都在那认真的写程序,给了我继续的信心。在同学和老师的帮助下,我顺利的结束了本次实习,让我知道原来凭借自己努力取得的成功会让自己这么欣慰,也让我知道了友谊和团结的重要性。

(4)程序清单

#include \"stdio.h\" #include \"stdlib.h\" #include \"string.h\"

struct wokers {

char num[10]; char name[15]; char sex[15];

//定义一个woker的结构体 //职工号 //职工姓名 //职工性别

char birthday[15]; //职工出生年月 char degree[10]; //职工学历 char position[10]; //职工职位 char salary[10]; //职工工资 };

typedef struct node {

struct wokers data;

struct node *next; //建立一个链表。 }Node;

void Add(Node *woker) //添加记录 {

Node *p,*r,*s;

char n[10]; //先用于输入职工号,也用于判断是否跳出循环 r=woker;

s=woker->next; //使s为第一个有用的结点

while(r->next!=NULL) //这个循环的作用是使r为最后一个有用的结点 r=r->next; //将指针置于最末尾 while(1) {

printf(\">>>>>>>>>>提示:输入0则返回主菜单!\\n\"); printf(\"\\n请你输入职工号:\"); scanf(\"%s\

if(strcmp(n,\"0\")==0) break; p=(Node *)malloc(sizeof(Node)); //申请空间 strcpy(p->data.num,n); printf(\"\\n请输入姓名:\");

scanf(\"%s\ printf(\"\\n请输入性别:\"); scanf(\"%s\

printf(\"\\n请输入出生年月:\"); scanf(\"%s\ printf(\"\\n请输入学历:\"); scanf(\"%s\ printf(\"\\n请输入职位:\"); scanf(\"%s\ printf(\"\\n请输入工资:\"); scanf(\"%s\

printf(\">>>>>>>>>>提示:已经完成一条记录的添加。\\n\"); p->next=NULL;

r->next=p; //这一步是必需的,将p与先前的链表连起来构成一条新链表

r=p; //也是必需的.将r 又重设为新链的最后一个有用结点 } }

void change(Node *woker) //修改职工信息函数 {

Node *p;

char find[20]; if(!woker->next) {

printf(\"\\n>>>>>>>>>>提示:没有资料可以修改!\\n\"); return; }

printf(\"请输入要修改的职工号:\"); scanf(\"%s\ p=woker->next; while(p!=NULL) {

if(strcmp(p->data.num,find)==0) //如果找到的话返回的是符合要求 break; p=p->next; }

if(p) {

int x; while(1) {

printf(\"完成修改请输入0否则输入任意数再进行修改:\"); scanf(\"%d\ if(x==0) {break;}

printf(\"请输入新职工号(原来是 %s ):\ scanf(\"%s\

printf(\"请输入新职工姓名(原来是 %s ):\ scanf(\"%s\

printf(\"请输入新职工性别(原来是 %s ):\ scanf(\"%s\

printf(\"请输入新出生年月(原来是 %s ):\ scanf(\"%s\

printf(\"请输入新职工学历(原来是 %s ):\ scanf(\"%s\

printf(\"请输入新职工职位(原来是 %s ):\ scanf(\"%s\

printf(\"请输入新职工工资(原来是 %s ):\ scanf(\"%s\

printf(\"\\n>>>>>>>>>>提示:该项记录资料已经成功修改!\\n\"); } }

else printf(\"\\n>>>>>>>>>>提示:你要修改的信息不存在!\\n\"); }

void Disp(Node *woker) //输出职工信息 {

Node *p;

p=woker->next; if(!p) {

printf(\"\\n>>>>>>>>>>提示:没有记录可以显示!\\n\"); return; }

printf(\"\\\\显示结果\\n\");

printf(\"职工号 职工姓名 职工性别 职工生日 职工学历 职工职位 职

工工资\\n\"); while(p) {

printf(\"\\n%-13s%-11s%-7s%-10s%-13s%-10s%-5s\\n\data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary); p=p->next; } }

void Tongji(Node *woker) //查找统计函数 {

Node *p;

int sel;int flag2=0,ha=0; p=woker->next;

char find[20];

if(!woker->next) //若链表为空 {

printf(\"\\n>>>>>>>>>>提示:没有资料可以统计分类!\\n\"); return; }

printf(\">>>>>>>>>>提示:\\n=====>0退出\\n=====>1按职工号统计\\n=====>2按职工姓名名

称统计\\n\"); scanf(\"%d\if(sel==1) {

printf(\"\\n输入你要统计分类的职工号:\");

scanf(\"%s\ while(p) {

if(strcmp(p->data.num,find)==0) {

flag2++; }

if(flag2==1&&ha!=flag2)

{ printf(\"职工号 职工姓名 职工性别 职工生日 职工学历 职工职位

职工工资\\n\");

printf(\"\\n%-13s%-11s%-7s%-10s%-13s%-10s%-5s\\n\data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary); ha=flag2; } else

if(flag2>ha){printf(\"\\n%-13s%-11s%-7s%-10s%-13s%-10s%-5s\\n\data.name,p->data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary);ha=flag2;} p=p->next; }

if(flag2) {

printf(\"\\n*************************按设备号%s统计分类的有%d条记

录:*************************\\n\\n\ }

else {printf(\"\\n按职工号%s统计的结果为0个\\n\\n\}

else if(sel==2) {

printf(\"\\n输入你要统计分类的职工姓名:\"); scanf(\"%s\ while(p) {

if(strcmp(p->data.name,find)==0) {

flag2++; }

if(flag2==1&&ha!=flag2)

{ printf(\"职工号 职工姓名 职工性别 职工生日 职工学历 职工职位

职工工资\\n\");

printf(\"\\n%-13s%-11s%-7s%-10s%-13s%-10s%-5s\\n\data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary);

ha=flag2; } else

if(flag2>ha){printf(\"\\n%-13s%-11s%-7s%-10s%-13s%-10s%-5s\\n\data.name,p->data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary);ha=flag2;} p=p->next; }

if(flag2) {

printf(\"\\n******************按设备名称%s统计的有%d条记

录:********************\\n\\n\ }

else {printf(\"\\n按职工姓名%s统计分类的结果为0个\\n\\n\}

else if(sel==0) return; }

void load(Node *woker) {Node *p,*q;

FILE *fp; //指向文件的指针 int recordNum; // 统计记录数

if((fp = fopen(\"职工管理系统.dat\ //打开文件 {

printf(\"can not open file\\n\"); //不能打开 }

p=woker;

recordNum = 0; while(!feof(fp))

{q=(Node*)malloc(sizeof(Node)); fscanf(fp,

\"%s %s %s %s %s %s %s\y,p->data.degree,p->data.position,p->data.salary);/*从文件读入记录*/ p->next=q; q->next=NULL; p=q;

recordNum++; }

fclose(fp);

printf(\"文件里共有%d条记录:\\n\}

void save(Node *woker) //将职工信息保存到文件 {

int n; Node *p;

FILE *fp; //指向文件的指针 printf(\"需要保存吗?(1-保存 0-不保存)\"); scanf(\"%d\ if(n) {

if(woker->next==NULL) printf(\"无记录\"); else p=woker->next;

if((fp = fopen(\"职工管理系统.dat\打开文件,并判断打开是

否正常

printf(\"can not open file\\n\"); // 打开文件出错 while(p!=NULL) {

fprintf(fp,\"%s %s %s %s %s %s %s\

ata.birthday,&p->data.degree,&p->data.position,&p->data.salary); p=p->next; }

fclose(fp); //关闭文件 } }

void dismiss(Node *woker) //删除职工信息函数 {Node *p,*r,*s; char find[10]; if(!woker->next) {

printf(\"\\n>>>>>>>>>>提示:没有资料可以显示!\\n\"); return; }

printf(\"\\n>>>>>>>>>>提示:请输入您要删除的职工号!\\n\"); scanf(\"%s\p=woker->next; while(p!=NULL) {

if(strcmp(p->data.num,find)==0) //如果找到的话返回的是

符合要求

break; p=p->next; }

if(!p)

printf(\"\\n>>>>>>>>>>提示:找不到您想删除的职工号!\\n\"); else

{r=woker;

while(r->next!=p) r=r->next; s=r->next;

r->next=r->next->next; } }

void main() {

Node *woker; FILE *fp; int flag; Node *p,*q;

printf(\"\\\\职工信息管理系统\\n\"); woker=(Node*)malloc(sizeof(Node)); woker->next=NULL; p=woker; while(1) {

printf(\"**************************************目录

**************************************\"); printf(\"\\n1添加记录\\n\"); printf(\"\\n2修改记录\\n\"); printf(\"\\n3浏览记录\\n\"); printf(\"\\n4分类查找记录\\n\"); printf(\"\\n5删除记录\\n\");

printf(\"\\n6从文件读取记录\\n\"); printf(\"\\n0*-EXIT-*\\n\");

printf(\"请输入你要操作的序号:\"); scanf(\"%d\ switch(flag) {

case 0: printf(\"\\n>>>>>>>>>>提示:已经退出系统,ByeBye!\\n\");break; case 1: Add(woker);save(woker);break; //增加记录 case 2: change(woker); break; //修改记录 case 3: Disp(woker); break; //显示记录信息

case 4: Tongji(woker); break; //查找记录 case 5: dismiss(woker); break; //删除记录 case 6: load(woker); break; //读取记录 default: printf(\"\\n>>>>>>>>>>提示:输入错误!\\n\"); break; } } }

五、评分

(请每个学生在做课程设计时仔细对照下面的考核标准表所列出的要求,在交报告之前先自己打自评分,老师将在验收成果时打分) (1)记录用结构表示,至少包含字符串(如名字)和整型(如年龄)(5%) 1.程序功能和原理(35%) (2)用链表来动态保存记录,并能以命令行或者菜单形式增加(5%)、删除(5%)、查询(5%)、排序(5%)内容。如果用数组最多得5分。 (3)用二进制文件永久保存记录,并能在程序开始运行时读取文件内容(5%),在程序运行结束前保存到文件(5%) 自评分 教师评分 (1)用大括号和缩进来清楚地显示程序结构。(提示: 按一次\"tab\"键产生一个缩进)(5%) (2)各函数有功能说明和参数说明,对每个函数参数和函数返回值的含义进行说明(5%) 2.程序质量(30%) (3)每个源程序文件都有说明(比如本程序功能,作者,包含哪些函数)(5%) (4)每个函数长度不超过100行(5%) (5)函数、变量取名较规范易懂(5%) (6)对不容易理解的常量、变量和语句有注释(比如全局常量、全局变量、if语句)(5%) (1)说明程序整体功能、各模块/函数功能(5%) (2)用流程图或其他有效方法描述一个函数的算法(5%) 3.总结报告(25%) (3)有小组分工情况说明和各自的经验总结(5%) (4)附程序清单(5%) (5)语言简练,条理清楚,图表规范,容易理解(5%) (提示:请关注一下字体大小、图表的标题) 4.调试手段(10%) (1)会单步运行到任何一个语句(5%) (2)单步运行时能查看变量值(5%) 总成绩: 等级:

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