资源描述
华中科技大学文华学院信息学部课程设计报告
C语言课程设计报告
题 目:职工信息管理系统
班 级:电科二班
学生姓名:钱 浩 宇
学 号:100110021118
指导老师:陈 维
日 期: 2011-6-29
目 录
1、 前言...............................................................................................2
2、需求分析.......................................................................................3
3、总体设计.......................................................................................3
4、详细设计.......................................................................................4
5、调试过程.......................................................................................5
6、结束语...........................................................................................7
7、参考文献.......................................................................................7
8、附录...............................................................................................8
1.前言
C语言是近年来在国内外都得到迅速推广的一种现代通用的程序设计语言,它不但具有丰富的数据类型与运算符、灵活的控制结构、简洁而高效的表达式、清晰的程序结构和良好的可移植性等优点,还具有直接支持计算机硬件编程的强大功能。其既具有高级语言的优点,有具有低级语言的优点,具有完善的结构化、模块化程序结构,是世界最流行、使用最广泛的高级程序设计语言之一。
但由于课堂教学和实验的深度和广度有限,练习的深度也受到一定的限制。所以开设了课程设计这门课。它比教学实验复杂一些,涉及的深度也广些,这样便可培养我们学生实际分析问题、编程和动手能力,也可以让我们更好的掌握《C语言》这门课程。
2.需求分析
根据要设计职工信息管理系统可以知道职工数据由职工编号、姓名、部门、职称、基 本工资、加班工资、奖金和总工资构成。
功能要求如下:
(1)添加职工的记录
(2)查询职工(分别按职工编号和姓名)
(3)对职工数据排序(分别按总工资的降序)
(4)删除职工记录
(5)修改职工记录
(6)插入职工信息
(7)输出职工信息表
(8)保存职工信息
3.总体设计
根据上面的需求分析,可以将这个系统设计分为以下模块:增加职工信息、删除职工信息、查询职工信息、修改职工信息、插入职工信息、排序、保存职工信息、显示职工信息。系统功能模块如下:
职 工 信 息 管 理 系 统
菜 单 选 择
显 示 职 工 信 息
保 存 职 工 信 息
排 序
插 入 职 工 信 息
修 改 职 工 信 息
查 询 职 工 信 息
增 加 职 工 信 息
删 除 职 工 信 息
按姓名
按工号
按姓名
按工号
按姓名
按工号
4.详细设计
(1).主函数:创建一个链表,并使用指针。
void main()
Link list;
FILE *fp;
int choose;
char ch;
int count=0;
struct node *p,*r;
pintf("\t\t\t\t职工信息管理系统\n\t\t\t\t\n");
list=(struct node*)malloc(sizeof(struct node));
if(!list)
{printf("\n allocate memory failure ");
return ; }
(2).定义各部分功能函数:
void Add(Link l) 增加职工信息
void Del(Link l) 删除职工信息
void Qur(Link l) 查询职工信息
void Modify(Link l) 修改职工信息
void Insert(Link l) 插入职工信息
void Sort(Link l) 排序
(3) 菜单函数:
void menu()
{
printf("\t***************************************************************\n");
printf("\t* *\n");
printf("\t* 职工信息管理系统 *\n");
printf("\t* *\n");
printf("\t* [1] 增加职工信息 [2] 删除职工信息 *\n");
printf("\t* [3] 查询职工信息 [4] 修改职工信息 *\n");
printf("\t* [5] 插入职工记录 [6] 排序 *\n");
printf("\t* [7] 保存职工信息 [8] 显示职工信息 *\n");
printf("\t* [0] 退出系统 *\n");
printf("\t* *\n");
printf("\t**************************************************************\n");
}
(4) .输出中文标题函数:
void printstart();
void Wrong();
void Nofind();
void printc();
5、调试过程
1.主菜单
2.增加职工信息
3.删除职工信息
4.查询职工信息
5.修改职工信息
6.插入职工信息
7排序.
6.结束语
通过为期二周的课程设计学习,我对《C语言》这门课程有了更深一步的了解。它是计算机程序设计的重要理论技术基础,在我们电子科学与技术专业的学习中占据着十分重要的地位。同时也使我知道,要学好这门课程,仅学习书本上的知识是不够的,还要有较强的实践能力。因为我们学习知识就是为了实践。而只有多实践,多编写程序,才能更好的理解与掌握书本上的东西。
然而这个程序还有不足之处,比如说:界面会跟随输入的数据而变得整齐或不整齐等等,这些都是有待改进的地方。
7.参考文献:
1.网站搜索:
2.《程序设计基础》(c语言) 杨有安 陈维 曹慧雅 鲁丽 编著
3.《C程序设计 课程设计》 刘振安,孙 忱 刘燕君 编著
4.《C语言程序设计-实验指导.课程设计.习题解答》 高涛 陆丽娜 编著
5.《C语言课程设计 案例精编》 姜灵芝 余健 编著
8.附录(源程序):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int saveflag=0;
struct employee
{
char name[15];
char num[10];
char sex[4];
char bm[15];
char zc[20];
int gz;
int jbgz;
int jj;
int zgz;
};
typedef struct node
{
struct employee data;
struct node *next;
}Node,*Link;
void add(Link l);
void disp(Link l);
void del(Link l);
Node* Locate(Link l,char findmess[],char nameornum[]);
void Qur(Link l);
void Sort(Link l);
void Modify(Link l);
void save(Link l);
void printe(Node *p);
void printstart();
void Wrong();
void Nofind();
void printc();
void menu()
{
printf("\t****************************************************************\n");printf("\t* *\n");
printf("\t* 职工信息管理系统 *\n");
printf("\t* *\n");
printf("\t* [1] 增加职工信息 [2] 删除职工信息 *\n");
printf("\t* [3] 查询职工信息 [4] 修改职工信息 *\n");
printf("\t* [5] 插入职工记录 [6] 排序 *\n");
printf("\t* [7] 保存职工信息 [8] 显示职工信息 *\n");
printf("\t* [0] 退出系统 *\n");
printf("\t* *\n");
printf("\t***************************************************************\n");
}
{
int count=0;
Node *p;
p=l->next;
if(!p)
{
printf("\n=====>提示:没有职工记录可以显示!\n");
return;
}
printf("\t\t\t\t显示结果\n");
printstart();
printc();
printf("\n");
while(p)
{
printe(p);
p=p->next;
}
printstart();
printf("\n");
}
void printstart()
{
printf("-----------------------------------------------------------------\n");
}
void Wrong()
{
printf("\n=====>提示:输入错误!\n");
}
void Nofind()
{
printf("\n=====>提示:没有找到该职工!\n");
}
void printc()
{
printf("工号\t 姓名 性别 部门 职称 工资 加班工资 奖金 总工资\n");
}
void printe(Node *p)
{
printf("%-12s%s\t%s\t%s\t%s\t%d\t%d\t%d\t%d\n",p->data.num,p->data.name,p->data.sex,p->data.bm,p->data.zc,p->data.gz,p->data.jbgz,p->data.jj,p->data.zgz);
}
Node* Locate(Link l,char findmess[],char zcornum[])
{
Node *r;
if(strcmp(zcornum,"num")==0) {
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.num,findmess)==0)
return r;
r=r->next;
}
}
else if(strcmp(zcornum,"zc")==0)
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.zc,findmess)==0)
return r;
r=r->next;
}
}
return 0;
}
void Add(Link l)
{
Node *p,*r,*s;
char num[10];
int flag=0;
r=l;
s=l->next;
while(r->next!=NULL)
while(1)
{
printf("请你输入工号(以'0'返回上一级菜单:)");
scanf("%s",num);
if(strcmp(num,"0")==0)
break;
s=l->next;
while(s)
{
if(strcmp(s->data.num,num)==0)
{
printf("=====>提示:工号为'%d'的职工已经存在,若要修改请你选择'4 修改'!\n",num);
flag=1;
break;
return ;
}
s=s->next;
}
p=(Node *)malloc(sizeof(Node));
strcpy(p->data.num,num);
printf("请你输入姓名:");
scanf("%s",p->data.name);
getchar();
printf("请你输入性别:");
scanf("%s",p->data.sex);
getchar();
printf("请你输入职工所在部门:");
scanf("%s",&p->data.bm);
getchar();
printf("请你输入职工职称:");
scanf("%s",&p->data.zc);
getchar();
printf("请你输入职工工资:");
scanf("%d",&p->data.gz);
getchar();
printf("请你输入职工加班工资:");
scanf("%d",&p->data.jbgz);
getchar();
printf("请你输入职工奖金:");
scanf("%d",&p->data.jj);
getchar();
p->data.zgz=p->data.gz+p->data.jbgz+p->data.jj;
p->next=NULL;
r->next=p;
r=p;
saveflag=1;
}
}
void Del(Link l)
{
int sel;
Node *p,*r;
char findmess[20];
if(!l->next) {
printf("\n=====>提示:没有记录可以删除!\n");
return;
}
printf("\n=====>1按工号删除\n=====>2按姓名删除\n");
scanf("%d",&sel);
if(sel==1) //按工号删除
{
printf("请你输入要删除的工号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:该职工已经成功删除!\n");
saveflag=1;
}
else
Nofind();
}
else if(sel==2)
{
printf("请你输入要删除的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next; //r r->next(p) p->next
free(p);
printf("\n=====>提示:该职工已经成功删除!\n");
saveflag=1;
}
else
Nofind();
} //if(sel==2)
else
Wrong();
}
void Qur(Link l)
{
int sel;
char findmess[20];
Node *p;
if(!l->next)
{
printf("\n=====>提示:没有资料可以查询!\n");
return;
}
printf("\n=====>1按工号查找\n=====>2按职称查找\n");
scanf("%d",&sel);
if(sel==1)/* 工号 */
{
printf("请你输入要查找的工号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("\t\t\t\t查找结果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else if(sel==2)
{
printf("请你输入要查找的职称:");
scanf("%s",findmess);
p=Locate(l,findmess,"zc");
if(p)
{
printf("\t\t\t\t查找结果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else
Wrong();
}
void Modify(Link l) //修改功能
{
Node *p;
char findmess[20];
if(!l->next)
{
printf("\n=====>提示:没有资料可以修改!\n");
return;
}
printf("请你输入要修改的职工工号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("请你输入新工号(原来是%s):",p->data.num);
scanf("%s",p->data.num);
printf("请你输入新姓名(原来是%s):",p->data.name);
scanf("%s",p->data.name);
getchar();
printf("请你输入新性别(原来是%s):",p->data.sex);
scanf("%s",p->data.sex);
getchar();
printf("请你输入新的部门(原来是%s):",p->data.bm);
scanf("%s",&p->data.bm);
printf("请你输入新的职称(原来是%s):",p->data.zc);
scanf("%s",&p->data.zc);
getchar();
printf("请你输入新的工资(原来是%d):",p->data.gz);
scanf("%d",&p->data.gz);
getchar();
printf("请你输入新的加班工资(原来是%d):",p->data.jbgz);
scanf("%d",&p->data.jbgz);
getchar();
printf("请你输入新的奖金(原来是%d):",p->data.jj);
scanf("%d",&p->data.jj);
getchar();
p->data.zgz=p->data.gz+p->data.jbgz+p->data.jj;
printf("\n=====>提示:资料修改成功!\n");
}
else
Nofind();
}
void Insert(Link l)
{
Node *s,*r,*p;
char ch,new_num[10],old_num[10];
int flag=0;
s=l->next;
system("cls");
Disp(l);
while(1)
{
printf("请你输入已存在的工号(以'0'返回上一级菜单:)");
scanf("%s",old_num);
if(strcmp(old_num,"0")==0)
return;
s=l->next;
flag=0;
while(s)
{
if(strcmp(s->data.num,old_num)==0)
{
flag=1;
break;
}
s=s->next;
}
if(flag==1)
break;
else
{
getchar();
printf("\n=====>The number %s is not existing,try again?(y/n):",old_num);
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
{continue;}
else
{return;}
}
}
printf("请你输入待插入的工号(以'0'返回上一级菜单:)");
scanf("%s",new_num);
if(strcmp(new_num,"0")==0)
return;
s=l->next;
while(s)
{
if(strcmp(s->data.num,new_num)==0)
{
printf("=====>提示:工号为'%s'的职工已经存在'!\n",new_num);
flag=1;
return ;
}
s=s->next;
}
p=(Node *)malloc(sizeof(Node));
if(!p)
{
printf("\n allocate memory failure ");
return ;
}
strcpy(p->data.num,new_num);
printf("请你输入姓名:");
scanf("%s",p->data.name);
getchar();
printf("请你输入性别:");
scanf("%s",p->data.sex);
getchar();
printf("请你输入部门:");
scanf("%s",&p->data.bm);
getchar();
printf("请你输入职称:");
scanf("%s",&p->data.zc);
getchar();
printf("请你输入工资:");
scanf("%d",&p->data.gz);
getchar();
printf("请你输入加班工资:");
scanf("%d",&p->data.jbgz);
getchar();
printf("请你输入奖金:");
scanf("%d",&p->data.jj);
getchar();
p->data.zgz=p->data.gz+p->data.jbgz+p->data.jj;
p->next=NULL;
saveflag=1;
r=l->next;
while(1)
{
if(strcmp(r->data.num,old_num)==0)
{
p->next=r->next;
r->next=p;
break;
}
r=r->next;
}
Disp(l);
printf("\n\n");
}
void Sort(Link l)
{
Link ll;
Node *p,*rr,*s;
int i=0;
if(l->next==NULL)
{ system("cls");
printf("\n=====>Not employee record!\n");
getchar();
return ;
}
ll=(Node*)malloc(sizeof(Node));
if(!ll)
{
printf("\n allocate memory failure ");
return ; }
ll->next=NULL;
system("cls");
Disp(l);
p=l->next;
while(p)
{
s=(Node*)malloc(sizeof(Node));
if(!s) /*s==NULL*/
{
printf("\n allocate memory failure ");
return ;
}
s->data=p->data;
s->next=NULL;
rr=ll;
while(rr->next!=NULL && rr->next->data.zgz>=p->data.zgz)
{rr=rr->next;}
if(rr->next==NULL)
rr->next=s;
else
{
s->next=rr->next;
rr->next=s;
}
p=p->next;
}
l->next=ll->next;
Disp(l);
saveflag=1;
printf("\n =====>sort complete!\n");
}
void Save(Link l)
{
FILE* fp;
Node *p;
int flag=1,count=0;
fp=fopen("employee.txt","wb");
if(fp==NULL)
{
printf("\n=====>提示:重新打开文件时发生错误!\n");
return;
}
p=l->next;
while(p)
{
if(fwrite(p,sizeof(Node),1,fp)==1)
{
p=p->next;
count++;
}
else
{
flag=0;
break;
}
}
if(count>0)
{
printf("\n=====>提示:文件保存成功.(有%d条记录已经保存.)\n",count);
saveflag=0;
}
else
{
system("cls");
printf("保存文件失败,'0'条记录被保存!\n");
}
fclose(fp);
}
void main()
{
Link list;
FILE *fp;
int choose;
char ch;
int count=0;
struct node *p,*r;
printf("\t\t\t\t职工信息管理系统\n\t\t\t\t\n");
list=(struct node*)malloc(sizeof(struct node));
if(!list)
{
printf("\n allocate memory failure ");
return ;
}
list->next=NULL;
r=list;
p=fopen("employee.txt","rb");
i
展开阅读全文