---信息管理
学校 石家庄铁道大学 指导老师 张翠肖 班级 信0901-1班 学号
姓名 张洁 院系 信息分院
2011.07.05
学生信息管理系统 一、 需求分析
本程序主要是执行链表的删除 插入等功能
根据程序提示
我们可以添加、修改、删除员工信息 并能进行多种方式的查询 还有员工信息一览
二、 概要设计
1) 为了实现上述功能 需要定义一下抽象的数据类型: ADT List{
数据对象:D={ai|ai∈ElemSet i=1 2·············· n n>=0}
数据关系:R1={ 2``````` n} 基本操作: Init List(&L); 操作结果:构造一个空的线性表L DestroyList(&L); 初始条件:线性表L存在 操作结果:销毁线性表L LocateElem(L I &e); 初始条件:线性表L存在 1操作结果:用e返回线性表L中第i个数据元素的值 ClearList(&L); 初始条件:线性表L存在 操作结果:将线性表L重置为空表 }ADT Graph 2) 本程序是由几个函数构成的: ① 主函数:main() ② 菜单函数menu(); ③ 文件读入函数:read data(); ④ 文件写入函数:write data(); ⑤ 信息查询函数:chaxun(); ⑥ 信息更新函数:gengxin(); ⑦ 信息一览函数:liebiao(); ⑧ 数据删除函数:shanchu(); ⑨ 数据添加函数:tianjia(); ⑩ 数据修改函数:xiugai(); 它们的调用关系如 三、 详细设计 #include #include #define LEN sizeof(struct emp) #define DATA \"employee.txt\" struct emp { long int num; //编号 char name[20]; //姓名 int age; //年龄 char sex[4]; //性别 char birthday[10]; //生日 char tel[15]; //电话 char edu[8]; //学历 char pos[20]; //职务 char add[30]; //住址 struct emp *next; }; struct emp *head=NULL; int t=0; void menu(); void gengxin(); void tianjia(); void insert(struct emp *em); void display(struct emp *p); void liebiao(); void chaxun(); void bianhao(); void shengri(); void xingming(); void readDate(); void writeDate(); void freeAll(); void shanchu(); void change(); void devise(struct emp *p); void main() { struct emp *head=NULL; head=(struct emp *)malloc(LEN); head->next=NULL;system(\"color 1f\"); system(\"mode con: cols=150 lines=500\"); readDate();menu(); system(\"cls\"); printf(\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"); printf(\" 谢谢使用 再见\\n\"); } void menu(void) { char i lj[100]; int flog;time_t T; struct tm * timenow; time ( &T );timenow = localtime ( &T ); flog=0; while(1) { system(\"cls\"); printf(\"\\n\\n\\n\\n\\n\"); printf(\" ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━员工信息管理系统━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ 1.员工信息查询 ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ 2.员工信息更新 ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ 3.员工信息列表 ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ 0.退出管理系统 ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\\n\"); printf(\" %s\" asctime (timenow) ); printf(\"请输入您的选择(数字0-3):\\n\"); scanf(\"%c\" &i);gets(lj); if(lj[0])i='a'; switch(i) { case '1':chaxun();break; case '2':gengxin();break; case '3':liebiao();break; case '0':flog=1;break; default:printf(\"输入有误 请按回车键重新输入\\n\");gets(lj);break; }if(flog)break; }} void tianjia() { struct emp *p *p1; char lj[100]; p=NULL;p1=head; printf(\"请输入第%d个员工的信息.\\n\" t+1); p=(struct emp *)malloc(LEN); if(p==NULL) {printf(\"分配空间失败\"); exit(0);} printf(\"请输入员工的编号:\\n\"); scanf(\"%ld\" &p->num); while((p1!=NULL)&&(p->num!=p1->num))p1=p1->next; if(p1!=NULL) {if(p->num==p1->num) { printf(\"编号已经存在 请重新输入 按回车键继续:\\n\"); free(p);gets(lj);getchar(); }} printf(\"请输入员工的姓名:\\n\"); scanf(\"%s\" p->name); printf(\"请输入员工的年龄:\\n\"); scanf(\"%d\" &p->age); printf(\"请输入员工的性别:\\n\"); scanf(\"%s\" p->sex); printf(\"请输入员工的出生年月:\\n\"); scanf(\"%s\" p->birthday); printf(\"请输入员工的电话:\\n\"); scanf(\"%s\" p->tel); printf(\"请输入员工的学历:\\n\"); scanf(\"%s\" p->edu); printf(\"请输入员工的职务:\\n\"); scanf(\"%s\" p->pos); printf(\"请输入员工的住址:\\n\"); scanf(\"%s\" p->add); insert(p); printf(\"输入的员工信息为:\\n\"); printf(\"------------------------------------------------------------------------:\\n\"); printf(\"编号\\姓名\\年龄\\性别\\出生年月\\电话\\学历\\职务\\住址:\\n\"); display(p);printf(\"按回车键继续\\n\");writeDate(); gets(lj);getchar();} void insert(struct emp *em) { struct emp *p0 *p1 *p2; p1=head; p0=em; if(head==NULL) {head=p0;p0->next=NULL;} else { while((p0->num > p1->num)&&(p1->next!=NULL)) {p2=p1; p1=p1->next;} if(p0->num<=p1->num) { if(head==p1)head=p0; else p2->next=p0;p0->next=p1; } else {p1->next=p0; p0->next=NULL; }}t++;} void display(struct emp *p) {printf(\"%ld\\%s\\%d\\%s\\%s\\%s\\%s\\%s\\%s\\n\" p->num p->name p->age p->sex p->birthday p->tel p->edu p->pos p->add);} void liebiao() { char lj[100]; struct emp *p; p=head; system(\"cls\"); if(head==NULL){printf(\"查找不到信息\\n\");menu();} printf(\"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━员工信息列表━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\n\"); printf(\"编号\\姓名\\年龄\\性别\\出生年月\\电话\\学历\\职务\\住址 :\\n\"); if(head!=NULL) {while(p!=NULL) {display(p);p=p->next;} } printf(\"\\n按回车键返回主菜单\\n\");gets(lj);} void chaxun() { char i lj[100]; int flog; time_t T; struct tm * timenow; time ( &T );timenow = localtime ( &T ); flog=0; while(1) { system(\"cls\"); printf(\"\\n\\n\\n\\n\\n\"); printf(\" ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━员工信息查询系统━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ 1.按照编号查询 ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ 2.按照姓名查询 ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ 3.按照生日查询 ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ 0.退出管理系统 ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\\n\"); printf(\" %s\" asctime (timenow) ); printf(\"请输入您的选择(数字0-3):\\n\"); scanf(\"%c\" &i);gets(lj); if(lj[0])i='a'; switch(i) { case '1':bianhao();break; case '2':xingming();break; case '3':shengri();break; case '0':flog=1;break; default:printf(\"输入有误 请重新输入\\n\");gets(lj);break; }if(flog)break;}} void bianhao() { int number;char lj[100]; struct emp *p1;p1=head; printf(\"请输入要查询员工的编号:\\n\"); scanf(\"%d\" &number); while((number!=p1->num)&&(p1->next!=NULL)) {p1=p1->next; } if(number==p1->num) { printf(\"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━员工信息查询━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\n\"); printf(\"要查询的员工信息:\\n\"); printf(\"编号\\姓名\\年龄\\性别\\出生年月\\电话\\学历\\职务\\住址:\\n\"); printf(\"%ld\\%s\\%d\\%s\\%s\\%s\\%s\\%s\\%s\\n\" p1->num p1->name p1->age p1->sex p1->birthday p1->tel p1->edu p1->pos p1->add); printf(\"按回车键继续\\n\");gets(lj); getchar(); } else if(p1->next==NULL) { printf(\"要查询的员工信息不存在 按回车键返回:\\n\"); gets(lj);getchar();}} void xingming() { char ch[10];struct emp *p;char lj[100];p=head; printf(\"请输入要查询的员工的名字:\\n\"); scanf(\"%s\" ch);if(p==NULL) { printf(\"不存在员工记录 按回车键返回.\\n\"); gets(lj); getchar(); return ;} while(strcmp(ch p->name)&&p->next!=NULL) {p=p->next;} if(!strcmp(ch p->name)) { printf(\"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━员工信息查询━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\n\"); printf(\"编号\\姓名\\年龄\\性别\\出生年月\\电话\\学历\\职务\\住址:\\n\"); display(p);printf(\"按回车键继续\\n\"); gets(lj);getchar();} else if(p->next==NULL) { printf(\"不存在员工记录.\\n\");gets(lj); getchar(); return;}} void shengri() { char bir[20] lj[100]; struct emp *p; p=head; printf(\"请输入要查询的员工的出生日期:\\n\"); scanf(\"%s\" bir);if(p==NULL) { printf(\"不存在员工记录.按回车键返回\\n\");gets(lj); getchar(); return ;} while(strcmp(bir p->birthday)&&p->next!=NULL) {p=p->next;} if(!strcmp(bir p->name)) { printf(\"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━员工信息查询━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\n\"); printf(\"编号\\姓名\\年龄\\性别\\出生年月\\电话\\学历\\职务\\住址:\\n\"); display(p);printf(\"按回车键继续\\n\");gets(lj); getchar(); } else if(p->next==NULL) {printf(\"不存在员工记录.按回车键返回\\n\");gets(lj); getchar(); return;}} void readDate() { FILE * fp;struct emp *p1 *p2;fp=fopen(DATA \"r\"); if(!fp) {printf(\"打开文件失败!按回车键继续\\n\");getchar();} else { fscanf(fp \"%d\\n\" &t);head=p1=p2=(struct emp *)malloc(LEN); fscanf(fp \"%ld\\%s\\%d\\%s\\%s\\%s\\%s\\%s\\%s\\n\" &p1->num p1->name &p1->age p1->sex p1->birthday p1->tel p1->edu p1->pos p1->add); while(!feof(fp)) {p1=(struct emp *)malloc(LEN); fscanf(fp \"%ld\\%s\\%d\\%s\\%s\\%s\\%s\\%s\\%s\\n\" &p1->num p1->name &p1->age p1->sex p1->birthday p1->tel p1->edu p1->pos p1->add); p2->next=p1; p2=p1;} p2->next=NULL;fclose(fp);}} void writeDate() { FILE* fp; struct emp *p1;fp=fopen(DATA \"w\"); if(!fp) { printf(\"打开文件失败!\\n\");remove(fp); getchar(); {fprintf(fp \"%d\\n\" t);for(p1=head;p1!=NULL;p1=p1->next) {fprintf(fp \"%ld\\%s\\%d\\%s\\%s\\%s\\%s\\%s\\%s\\n\" p1->num p1->name }else p1->age p1->sex p1->birthday p1->tel p1->edu p1->pos p1->add); }fclose(fp);}} void freeAll() { struct emp *p1 *p2; p1=p2=head; while(p1) { p2=p1->next;free(p1);p1=p2; }} void shanchu() { struct emp *p1 *p2; long int number;char lj[100]; if(head==NULL) { printf(\"无员工纪录!按回车键返回\\n\"); gets(lj);getchar();return; } printf(\"请输入你要删除的员工的编号:\\n\"); scanf(\"%ld\" &number); p1=head; while(number!=p1->num&&p1->next!=NULL) {p2=p1;p1=p1->next;} if(number==p1->num) { if(p1==head)head=p1->next; else p2->next=p1->next; free(p1);t--; writeDate();printf(\"删除成功 按回车键继续\\n\");} else printf(\"没有该员工的纪录 请核对.按回车键返回\\n\");gets(lj); getchar();} void xiugai() { struct emp *p1 *p2; long int number; char lj[100]; if(head==NULL) { printf(\"无员工纪录!按回车键返回\\n\"); gets(lj); getchar(); return; } printf(\"请输入你要修改的员工的编号:\\n\"); scanf(\"%ld\" &number); gets(lj); p1=head; while(number!=p1->num&&p1->next!=NULL) { p2=p1; p1=p1->next; } if(number==p1->num) { devise(p1); writeDate(); printf(\"修改成功 按回车键继续\\n\"); } else printf(\"没有该员工的纪录 请核对.按回车键返回\\n\"); gets(lj); getchar(); } void devise(struct emp *p) { char i lj[100]; int flog; time_t T; struct tm * timenow; time ( &T );timenow = localtime ( &T ); flog=0; while(1) { system(\"cls\"); printf(\"\\n\\n\\n\\n\\n\"); printf(\" ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━员工信息修改━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ 1.修改员工姓名 ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃\\n\"); printf(\" ┃\\n\"); printf(\" 2.修改员工年龄 \\n\"); printf(\" ┃\\n\"); printf(\" ┃\\n\"); printf(\" ┃\\n\"); printf(\" 3.修改员工性别 \\n\"); printf(\" ┃\\n\"); printf(\" ┃\\n\"); printf(\" ┃\\n\"); printf(\" 3.修改员工生日 \\n\"); printf(\" ┃\\n\"); printf(\" ┃\\n\"); printf(\" ┃\\n\"); printf(\" 3.修改员工电话 \\n\"); printf(\" ┃┃┃┃┃┃┃┃┃┃┃┃┃┃┃┃┃┃┃┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ 0.退出管理系统 ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\\n\"); printf(\" %s\" asctime (timenow) ); printf(\"请输入您的选择(数字0-3):\\n\"); scanf(\"%c\" &i); gets(lj); if(lj[0])i='a'; switch(i) { case '1':printf(\"请输入员工的姓名:\\n\");scanf(\"%s\" p->name);break; case '2':printf(\"请输入员工的年龄:\\n\");scanf(\"%d\" &p->age);break; case '3':printf(\"请输入员工的性别:\\n\");scanf(\"%s\" p->sex);break; case '4':printf(\"请输入员工的出生年月:\\n\");scanf(\"%s\" p->birthday); break; case '5':xiugai();printf(\"请输入员工的电话:\\n\");scanf(\"%s\" p->tel);break; case '0':flog=1;break; default:printf(\"输入有误 请重新输入\\n\");gets(lj);break; } if(flog)break; } } void gengxin() { char i lj[100]; time_t T; int flog; struct tm * timenow; time ( &T );timenow = localtime ( &T ); flog=0; while(1) { system(\"cls\"); printf(\"\\n\\n\\n\\n\\n\"); printf(\" ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━员工信息更新系统━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ 1.员工信息添加 ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ 2.员工信息删除 ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ 3.员工信息修改 ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ 0.退出管理系统 ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┃ ┃\\n\"); printf(\" ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\\n\"); printf(\" %s\" asctime (timenow) ); printf(\"请输入您的选择(数字0-3):\\n\"); scanf(\"%c\" &i); gets(lj); if(lj[0])i='a'; switch(i) { case '1':tianjia();break; case '2':shanchu();break; case '3':xiugai();break; case '0':flog=1;break; default:printf(\"输入有误 请重新输入\\n\");gets(lj);break; } if(flog)break; } } 四、 调试分析 在这个程序中 由于思维不周密 大量的空指针给我造成了巨大困扰 致使内存无法读写 此外 对c语言读写文件的不熟悉 也使我浪费了很多时间 五、 用户使用说明 本程序使用c语言编写 在vc6.0环境下编译通过 根据提示 用户通过输入个位数0-3选择不同的功能 进行查询、修改、浏览员工信息 六、 测试结果 ?? ?? ?? ??
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo6.cn 版权所有 赣ICP备2024042791号-9
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务