int menu(){
printf("请按提示输入完成操作!\n");
printf("1.查询员工信息\n");
printf("2.统计员工数量\n");
printf("3.录入员工信息\n");
printf("4.删除员工信息\n");
printf("5.按id排序所有员工\n");
printf("6.打印所有员工信息\n");
printf("7.退出系统\n");
return 0;
}
如menu()函数所示,该系统一共有7个功能
-
#include <stdio.h>
-
#include <stdlib.h>
-
#include <string.h>
-
struct emp{
-
int id;
-
char name[50];
-
struct emp * next;
-
};
-
struct emp * initList();
-
struct emp * addListTailNode(struct emp * head);
-
struct emp * deleteListNode(struct emp * head,int id);
-
struct emp * searchEmp(struct emp * head,int id);
-
int printList(struct emp * l);
-
int printNode(struct emp * p);
-
struct emp * sortList(struct emp * head);
-
int getListLen(struct emp * head);
-
int writeToDisk(struct emp * head);
-
struct emp * readFromDisk();
-
int menu();
-
int usage(struct emp * head);
-
#include "emp.h"
-
int main(){
-
struct emp * head;
-
head=readFromDisk();
-
usage(head);
-
return 0;
-
}
-
struct emp * initList(){
-
struct emp * head;
-
head=(struct emp *)malloc(sizeof(struct emp));
-
head->next=NULL;
-
return head;
-
}
-
struct emp * addListTailNode(struct emp * head){
-
int id;
-
char name[50];
-
struct emp * p, * last , * check;
-
last = head;
-
while(last->next!=NULL){
-
last=last->next;
-
}
-
printf("依次输入:员工id号,姓名!\n");
-
scanf("%d%s",&id,&name);
-
check = head;
-
while(check!=last){
-
check=check->next;
-
if(id==check->id){
-
printf("添加失败!员工id号重复!\n");
-
return head;
-
}
-
}
-
p=(struct emp *)malloc(sizeof(struct emp));
-
p->id=id;
-
strcpy(p->name,name);
-
last->next=p;
-
last=p;
-
p->next=NULL;
-
printf("%s员工信息已添加!\n",p->name);
-
return head;
-
}
-
struct emp * deleteListNode(struct emp * head,int id){
-
struct emp * p,* q;
-
p = head->next;
-
while(p!=NULL){
-
if(p->next->id==id){
-
break;
-
}
-
p=p->next;
-
}
-
if(head->next==NULL){
-
printf("书籍信息为空!删除失败!\n");
-
}
-
else{
-
q = p->next;
-
p->next = q->next;
-
printf("%s书籍信息被删除!\n",q->name);
-
free(q);
-
}
-
return head;
-
}
-
struct emp * searchEmp(struct emp * head,int id){
-
struct emp * p;
-
p = head->next;
-
while(p!=NULL){
-
if(p->id==id){
-
break;
-
}
-
p=p->next;
-
}
-
return p;
-
}
-
int printNode(struct emp * p){
-
if(p!=NULL){
-
printf("员工id: %d 员工姓名:%s\n",p->id,p->name);
-
}
-
else{
-
printf("系统内无该员工信息!\n");
-
}
-
return 0;
-
}
-
int printList(struct emp * head){
-
struct emp * p;
-
p = head->next;
-
while(p!=NULL){
-
printNode(p);
-
p=p->next;
-
}
-
return 0;
-
}
-
struct emp * sortList(struct emp * head){
-
struct emp * p,* q;
-
int temp_id;
-
char temp_name[50];
-
for(p=head->next;p!=NULL;p=p->next){
-
for(q=p->next;q!=NULL;q=q->next){
-
if(p->id>q->id){
-
temp_id = q->id;
-
q->id = p->id;
-
p->id = temp_id;
-
strcpy(temp_name,q->name);
-
strcpy(q->name,p->name);
-
strcpy(p->name,temp_name);
-
}
-
}
-
}
-
return head;
-
}
-
int getListLen(struct emp * head){
-
int len=0;
-
struct emp * p;
-
p=head->next;
-
while(p!=NULL){
-
len++;
-
p=p->next;
-
}
-
return len;
-
}
-
int writeToDisk(struct emp * head){
-
FILE * fp;
-
struct emp * p;
-
if((fp = fopen("D:\\emp.hhtx", "w")) == 0){
-
printf("写入失败……!\n");
-
return 0;
-
}
-
p=head->next;
-
while(p!=NULL){
-
fwrite(p,sizeof(struct emp),1,fp);
-
printf("%d %s\n",p->id,p->name);
-
p=p->next;
-
}
-
fclose(fp);
-
return 0;
-
}
-
struct emp * readFromDisk(){
-
FILE * fp;
-
struct emp * head,* last,* p,* temp;
-
head = initList();
-
if((fp = fopen("D:\\emp.hhtx", "r")) == 0){
-
printf("加载失败……未找到存档数据!\n\n");
-
return head;
-
}
-
last = head;
-
p=(struct emp *)malloc(sizeof(struct emp));
-
while(p!=NULL){
-
p=(struct emp *)malloc(sizeof(struct emp));
-
fread(p,sizeof(struct emp),1,fp);
-
printf("读取数据: %d %s\n",p->id,p->name);
-
last->next=p;
-
last=p;
-
p=p->next;
-
}
-
fclose(fp);
-
printf("系统数据初始化完成!");
-
return head;
-
}
-
int menu(){
-
printf("请按提示输入完成操作!\n");
-
printf("1.查询员工信息\n");
-
printf("2.统计员工数量\n");
-
printf("3.录入员工信息\n");
-
printf("4.删除员工信息\n");
-
printf("5.按id排序所有员工\n");
-
printf("6.打印所有员工信息\n");
-
printf("7.退出系统\n");
-
return 0;
-
}
-
int usage(struct emp * head){
-
int x,id;
-
struct emp * p;
-
menu();
-
while(1){
-
printf("请输入序列号:");
-
scanf("%d",&x);
-
switch(x){
-
case 1:
-
printf("输入所要查询的员工的id号:");
-
scanf("%d",&id);
-
p = searchEmp(head,id);
-
printNode(p);
-
printf("---------------------------------\n");
-
break;
-
case 2:
-
printf("系统中一共存在%d个员工\n",getListLen(head));
-
break;
-
case 3:
-
head=addListTailNode(head);
-
printf("---------------------------------\n");
-
break;
-
case 4:
-
printf("输入所要删除的员工的id号:");
-
scanf("%d",&id);
-
head=deleteListNode(head,id);
-
printf("---------------------------------\n");
-
break;
-
case 5:
-
printf("排序开始……\n");
-
head=sortList(head);
-
printf("排序已完成!\n");
-
printf("---------------------------------\n");
-
break;
-
case 6:
-
printList(head);
-
printf("---------------------------------\n");
-
break;
-
case 7:
-
writeToDisk(head);
-
printf("保存完成……\n");
-
printf("已退出系统!\n");
-
printf("---------------------------------\n");
-
return 0;
-
default:
-
return 0;
-
}
-
}
-
return 0;
-
}
评论