include<stdio.h>
#include <stdlib.h>
#include<string.h>
#include<windows.h>
#define N sizeof(struct works) /* N的值为struct works长度*/
typedef struct works
{
char num[15]; //职工号
char name[20]; //名字
char sex[5]; //性别
char birth[11]; //出生日期
char study[20]; //学历
char position[15]; // 职位
char salary[20]; //工资
char addr[20]; //地址
char tel[11]; //电话号码
struct works *next; //定义了
}Node;
void menu()
{
printf("********************************************************************************\n");
printf("\t\t\t 欢迎使用职工管理系统\n");
printf("\t\t\t 1.录入职工信息。\n");
printf("\t\t\t 2.查询职工信息。\n");
printf("\t\t\t 3.按职工号排序。\n");
printf("\t\t\t 4.删除职工信息。\n");
printf("\t\t\t 5.修改职工信息。\n");
printf("\t\t\t 6.保存职工信息。\n");
printf("\t\t\t 7.读取职工信息。\n");
printf("\t\t\t 8.浏览职工信息。\n");
printf("\t\t\t 0.退出系统。\n");
printf("\t\t\t 选择对应编号:");
}
Node *create(Node *&head)
{ // 建立链表
Node *p1,*p2,*p;
int n=1;
char a;
do {
p1=(Node *)malloc(N);/*为p1开辟一个新单元,后面的都与之相似*/
printf("输入职工信息:\n");
printf("\n职工号:");
scanf("%s",p1->num);/*存入p1*/
p=head; //开辟新节点为了查询重复
// do{
// printf("\n输入职工号:");
// scanf("%s",p->num);
// if(strcmp(p1->num,p->num)==0)
// {
// printf("职工号重复!");
// }
//
// };/*这里查重复可以使用调用函数,包括下边的性别也是*/
//int isExist(char number[],Node *&head){
//
// Node* p ;
// p= head;
//
// while(p){
// if(strcmp(p -> num,num) == 0){
// printf("该职工号已重复,请重新输入:\n");
// return 1;
// }
// p = p->next;
// }
// return 0;
//}
printf("姓名:");
scanf("%s",p1->name);
printf("性别(输入男或女):");
scanf("%s",p1->sex);
while(strcmp(p1->sex,"男")&&strcmp(p1->sex,"女")) /*判断男女*/
{
/*strcmp的作用是比较字符串1和字符串2。
(1) 如果字符串1=字符串2,函数值为0。
(2) 如果字符串1>字符串2,函数值为一正整数。
(3) 如果字符串1<字符串2,函数值为一负整数
注:strcpy也是字符串的用法*/
printf("请重新输入!");
scanf("%s",p1->sex);
}
printf("出生年月(例如:2002-02-02):");
scanf("%s",p1->birth);
printf("学历----(本科/专科):");
scanf("%s",p1->study);
printf("职务----(现处于职务):");
scanf("%s",p1->position);
printf("工资-----:");
scanf("%s",p1->salary);
printf("住址----:");
scanf("%s",p1->addr);
printf("电话号码:");
scanf("%s",p1->tel);
p1->next=NULL;
if(n==1) {
head=p1;
}
p2->next=p1;
p2=p1;
n++;
printf("\n输入 y 继续输入,输入其他返回主菜单\n");
getchar(); //可以吸收输入的空格 或者一个字符
a=getchar();
} while(a=='y'||a=='Y');
//执行是否输入下一个数据
return head;
}
Node *seek1(Node *head)
{ // 查找
Node *p;
char k[15];
p=head;
printf("\n输入查找职工的职工号:\n");
scanf("%s", k);
while(strcmp(p->num,k)!=0&&p->next!=NULL)
{
p=p->next;
}
if(strcmp(p->num,k)==0)
{ //找到了
printf("\n职工号\t姓名\t性别\t出生年月\t学历\t职务\t工资\t住址\t电话号码\n");
printf("%d\t%s\t%s\t%s\t\t%s\t%s\t%s\t%s\t%s\n",p->num,p->name,p->sex,p->birth,p->study,p->position,p->salary,p->addr,p->tel);
}
else
{ //*没有找到
printf("\n未找到该职工!\n");
}
return p;
}
Node *seek2(Node *&head)
{
Node *p;
char M[20];
p=head;
printf("请输入要查找的职工姓名:\n");
scanf("%s",M);
while(strcmp(p->name,M)!=0&&p->next!=NULL)
{
p=p->next;
}
if(strcmp(p->name,M)==0)
{
printf("\n未找到该职工!\n");
}
else {
if(strcmp(p->name,M)!=0)
printf("\n职工号\t姓名\t性别\t出生年月\t学历\t职务\t工资\t住址\t电话号码\n");
printf("%d\t%s\t%s\t%s\t\t%s\t%s\t%s\t%s\t%s\n",p->num,p->name,p->sex,p->birth,p->study,p->position,p->salary,p->addr,p->tel);
}
return p;
}
void menu1()
{
printf("*********欢迎进入查询系统***********\n");
printf("\t\t1.按职工号查找\n");
printf("\t\t2.按姓名查找\n");
printf("\t\t 3.退出 \n");
printf("************结束使用*******************\n");
}
Node *sort(Node *&head)
{
Node *p1,*p2,*p3;
char a[20];
p3=(Node *)malloc(N);
for(p1=head; p1!=NULL; p1=p1->next)
{
for(p2=p1->next; p2!=NULL; p2=p2->next)
{
if(p1->num>p2->num)
{
strcpy(p3->num,p2->num); //后面的字符赋值给前面的字符串
strcpy(p2->num,p1->num);
strcpy(p1->num,p3->num);
strcpy(a,p1->name);
strcpy(p1->name,p2->name);
strcpy(p2->name,a);
strcpy(a,p1->sex);
strcpy(p1->sex,p2->sex);
strcpy(p2->sex,a);
strcpy(a,p1->birth);
strcpy(p1->birth,p2->birth);
strcpy(p2->birth,a);
strcpy(a,p1->study);
strcpy(p1->study,p2->study);
strcpy(p2->study,a);
strcpy(a,p1->position);
strcpy(p1->position,p2->position);
strcpy(p2->position,a);
strcpy(a,p1->salary);
strcpy(p1->salary,p2->salary);
strcpy(p2->salary,a);
strcpy(a,p1->addr);
strcpy(p1->addr,p2->addr);
strcpy(p2->addr,a);
strcpy(a,p1->tel);
strcpy(p1->tel,p2->tel);
strcpy(p2->tel,a);
}
}
}
return head;
}
void Delete(Node *&head)
{
Node *p, *r;
char k[15];
p = head;
if (p == NULL)
{
printf("提示:没有职工信息可以删除!\n ");
return ;
}
printf(" \n提示:请输入你要删除的职工号!\n ");
scanf("%s",k);
if(strcmp(p->num,k)==0)
{
head = head->next; //头节点指向下一个的下一个,直接把下一个隔了过去,就这样把下一个给删除了,
printf("删除成功!");
return;
}
while (p->next != NULL)
{
if (strcmp(p->next->num,k)==0)
{
p->next = p->next->next;
printf("删除成功!");
break;
}
p = p->next;
}
}
Node *change(Node *&head)
{ // 修改
Node *p;
char k[15];
p=head;
printf("\n输入要修改职工的职工号:");
scanf("%s",k);
while(strcmp(p->num,k)!=0&&p->next!=NULL)
{
p=p->next;/*后一一个结点*/
}
if(strcmp(p->num,k)==0)
{ /*找到了*/
printf("\n职工号:");
scanf("%s",p->num);
// p1=head;
// while(strcmp(p1->num,k)!=0&&p1->next!=NULL)
// {
// p2=p1;
// p1=p1->next;
// }
printf("姓名:");
scanf("%s",p->name);
printf("性别(输入男或女):");
scanf("%s",p->sex);
while(strcmp(p->sex,"男")&&strcmp(p->sex,"女")) {
printf("请重新输入!");
scanf("%s",p->sex);
}
printf("出生年月 (例如:2002-02-02):");
scanf("%s",p->birth);
printf("学历: (本科/专科)");
scanf("%s",p->study);
printf("职务: (现处于职务)");
scanf("%s",p->position);
printf("工资------");
scanf("%s",p->salary);
printf("住址------");
scanf("%s",p->addr);
printf("电话号码--");
scanf("%s",p->tel);
printf("\n修改成功!\n");
}
else
{
printf("\n未找到该职工 !\n");
}
return head;
}
Node *save(Node *&head)
{ // 保存
FILE *fp;
Node *p;
p=head;
if((fp=fopen("C:\\职工信息管理系统.txt","w+"))==NULL)
{
printf("打开失败\n");
exit(0);
}
while(p!=NULL)
{
fprintf(fp,"%s %s %s %s %s %s %s %s %s\n",p->num,p->name,p->sex,p->birth,p->study,
p->position,p->salary,p->addr,p->tel);
p=p->next;
}
printf("保存成功\n");
fclose(fp);
printf("\n");
return head;
}
Node *Du_qu(Node *&head)
{
FILE *fp;
// Node *head;
head = (Node*)malloc(N);
Node *q=(Node*)malloc(N);
if((fp=fopen("C:\\职工信息管理系统.txt","r+"))==NULL)
{
printf("没有此文件!");
}
q = head;
while (!feof(fp))
{
Node *p=(Node*)malloc(N);
fscanf(fp,"%s %s %s %s %s %s %s %s %s\n",p->num,p->name,p->sex,p->birth,p->study,
p->position,p->salary,p->addr,p->tel);
printf("%s %s %s %s %s %s %s %s %s\n",p->num,p->name,p->sex,p->birth,p->study,
p->position,p->salary,p->addr,p->tel);
p->next = NULL;
q->next = p;
q= p;
}
fclose(fp);
return head;
}
Node *disp(Node *&head)
{
Node *p;
p=head;
printf("\n职工号\t姓名\t性别\t出生年月\t学历\t职务\t工资\t住址\t电话号码\n");
while(p!=NULL)
{ printf("%s\t%s\t%s\t%s\t\t%s\t%s\t%s\t%s\t%s\n",p->num,p->name,p->sex,p->birth,p->study,
p->position,p->salary,p->addr,p->tel);
p=p->next;
}
return head;
}
int main()
{
system("color 0B"); //输出框的颜色与#include<windows.h>相对应
char ch;
int k;
while(1) {
menu();
scanf("%d",&k);
switch(k)
{
case 1:create(head);save(head); break;
case 2:menu1();disp(head);seek(head);break;
case 3:sort(head);disp(head);break;
case 4:Delete(head);save(head);break;
case 5:change(head);save(head);break;
case 6:save(head);break;
case 7:Du_qu(head); disp(head);break;
case 8:disp(head);break;
case 0: printf(" 谢谢对本系统的使用!\n");
exit(0);
break;
}
}
printf("************************************谢谢使用************************************\n");
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。