📄 wage.c
字号:
switch(ch)
{
case '1':
clrscr();
printf("\n\n\n\n\n\n");
printf("\t\t Please input new UserNo:");
scanf("%s",&p->UserNo);
printf("\n\n\n");
printf("\t\t Select the Option to update:");
break;
case '2':
clrscr();
printf("\n\n\n\n\n\n");
printf("\t\t Please input new UserName:");
scanf("%s",p->UserName);
printf("\n\n\n");
printf("\t\t Select the Option to update:");
break;
case '3':
clrscr();
printf("\n\n\n\n\n\n");
printf("\t\t Please input new Wage:");
scanf("%f",&p->Wage);
printf("\n\n\n");
printf("\t\t Select the Option to update:");
break;
case '4':
clrscr();
printf("\n\n\n\n\n\n");
printf("\t\t Please input new OtherWage:");
scanf("%d",&p->OtherWage);
printf("\n\n\n");
printf("\t\t Select the Option to update:");
break;
default:
printf("\t\t Invalid input information!");
break;
}
}
}
void UpdateInfo()
{
user *p; /*移动指针*/
char s[10]; /*保存姓名*/
clrscr(); /*清屏*/
printf("\n\n\n\n\n");
printf("\t\t Please enter UserNo for search:"); /*提示输入*/
scanf("%s",s); /*输入要查找人的姓名*/
p=First; /*移动指针从头指针开始*/
while(strcmp(p->UserNo,s)&&p!=NULL) /*做比较判断*/
p=p->next; /*没找到,指针后移继续查找*/
if(p==NULL) /*指针为空,说明没有找到*/
{
clrscr();
printf("\n\n\n\n\n\n");
printf("\t\t The UserNo %s is not exist\n",s); /*显示没找到信息*/
printf("\n\n\n\n\n\n");
}
else
{
printf("\n\n"); /*换行*/
Print(p); /*查找成功,调用输出函数输出指针p所指记录*/
Update(p);
return;
}
printf("\t\t Press any key to return......");
getch();
}
/*插入结点*/
void InsertToList()
{
user *p,*info; /* info为新结点,p为新结点的后继*/
char s[20]; /*保存查找的姓名*/
float temp; /*临时变量*/
clrscr(); /*清屏*/
printf("\n\n\n\n\n");
printf("\t\t please input UserNo to insert:"); /*提示输入在哪个结点之前插入*/
scanf("%s",s); /*输入指定结点的编号*/
clrscr();/*清屏*/
gotoxy(15,7); /*定位光标,按表格形式输入新结点信息*/
printf("**************WageManage System***********");
gotoxy(15,9);
printf("|----------------------------------------|");
gotoxy(15,10);
printf("| UserNo | UserName | Wage |");
gotoxy(15,11);
printf("|----------|--------------------|--------|");
info=(user *)malloc(sizeof(user)); /*申请空间*/
if(!info)
{
printf("\nout of memory"); /*如没有得到空间,内存溢出*/
exit(0); /*退出程序*/
}
info->next=NULL; /*新结点的后继为空*/
info->prior=NULL; /*新结点的前驱为空*/
gotoxy(15,12);printf("|");
gotoxy(26,12);printf("|");
gotoxy(47,12);printf("|");
gotoxy(56,12);printf("|");
gotoxy(16,12);
inputs(info->UserNo,10); /*输入新结点的编号,并校验*/
if(info->UserNo[0] == '#')
{
return;
} /*编号首字符为#结束输入*/
gotoxy(27,12);
inputs(info->UserName,20); /*输入新结点的姓名,并校验*/
gotoxy(48,12);
scanf("%f",&temp); /*输入基本工资*/
info->Wage=temp; /*给基本工资字段赋值*/
info->OtherWage=0; /*扣款初始为0*/
printf("|----------|--------------------|--------|");
p=First; /*移动指针从头指针开始*/
while(strcmp(p->UserNo,s)&&p!=NULL) /*查找结点确定插入位置*/
p=p->next; /*指针后移,继续查找*/
if(p==NULL) /*如p为空*/
if(p==First) /*如p为头指针,说明链表为空*/
{
First=info; /*新结点为头指针*/
First->prior=NULL; /*头结点的前驱为空*/
Last=First; /*唯一结点,尾指针等于头指针*/
}
else /*新结点插在尾部*/
{
Last->next=info;
info->prior=Last;
Last=info; /*尾指针指向新结点*/
}
else
if(p==First) /*p不为空,但p为头指针,新结点插在第一个结点位置*/
{
info->prior=NULL; /*新结点的前驱为空*/
info->next=p; /*新结点的后继为p*/
p->prior=info; /*p的前驱是新结点*/
First=info; /*修改头指针指向新结点*/
}
else /*新结点插入在中间某一个位置p之前*/
{
info->next=p; /*新结点的后继是p*/
info->prior= p->prior; /*新结点的前驱是p的前驱*/
p->prior->next=info; /*p的前驱的后继是新结点*/
p->prior=info; /*p的前驱是新结点*/
}
clrscr();
printf("\n\n\n\n\n\n\n\n\n\n\n");
printf("\t\t ----Insert %s's wage success----\n",info->UserName);
printf("\n\n\n");
printf("\t\t Press any key to return......");
getch();
}
//将输入数据保存到文件
void SaveToFile()
{
FILE *fp; /*定义指向文件的指针*/
user *p; /*定义移动指针*/
char filename[10]; /*保存输出文件名*/
clrscr();/*清屏*/
printf("\n\n\n\n\n\n");
printf("\t\t Enter file name as follows e:\\data.txt:\n");/*提示输入文件名格式信息*/
gotoxy(20,12);
scanf("%s",filename);
if((fp=fopen(filename,"wb"))==NULL) /*为输出打开一个二进制文件*/
{
printf("\n\n\n");
printf("\t\t file name error,save failed\n");
printf("\n\n\n");
printf("\t\t Press any key to return......");
getch();
}
p=First; /*移动指针从头指针开始*/
while(p!=NULL) /*如p不为空*/
{
fwrite(p,sizeof(user),1,fp); /*写入一条记录*/
p=p->next; /*指针后移,处理下一条记录*/
}
fclose(fp); /*关闭文件*/
printf("\n\n\n");
printf("\t\t Save file success!\n");/*显示保存成功*/
printf("\n\n\n");
printf("\t\t Press any key to return......");
getch();
}
//从文件中读取数据
void LoadfromFile()
{
user *p,*q=NULL; /*定义记录指针变量*/
FILE *fp; /* 定义指向文件的指针*/
char filename[10]; /*保存文件名*/
clrscr();/*清屏*/
printf("\n\n\n\n\n\n");
printf("\t\t Enter file name as follows e:\\data.txt:\n");/*输入文件名格式*/
printf("\n\n\n");
printf("\t\t ");
scanf("%s",filename); /*输入文件名*/
if((fp=fopen(filename,"rb"))==NULL) /*打开一个二进制文件,为读方式*/
{
clrscr();
printf("\n\n\n\n\n\n");
printf("\t\t Can't open the file %s\n",filename); /*如不能打开,则结束程序*/
printf("\n\n\n");
printf("\t\t Press any key to return......");
getch();
return; /*返回*/
}
while(First) /*当表不为空时,清空链表*/
{
p=First; /*从头指针开始*/
First=First->next; /*删除头结点*/
free(p); /*释放空间*/
}
First=(user *)malloc(sizeof(user)); /*为头指针申请空间*/
if(!First) /*如果没有得到空间 显示内存溢出*/
{
printf("out of memory!\n");
return; /*返回*/
}
p=First; /*将头指针赋值给p*/
while(!feof(fp)) /*当文件不空时*/
{
if(1!=fread(p,sizeof(user),1,fp))break; /*将记录读到p所指的结点*/
p->next=(user *)malloc(sizeof(user));/*为p的后继申请空间*/
if(!p->next) /*如果没有得到空间显示内存溢出*/
{
printf("out of memory!\n");
return; /*返回*/
}
p->prior=q; /*得到空间,则链接指针关系p的前驱为q*/
q=p; /*保存p做为新的p结点的前驱*/
p=p->next; /*p指针后移*/
}
q->next=NULL; /*q的后继为空*/
Last=q; /*尾指针为q*/
First->prior=NULL; /*头指针的前驱为空*/
fclose(fp); /*关闭文件*/
printf("\n\n\n");
printf("\t\t Reading file Success!!!\n"); /*显示成功读入记录*/
printf("\n\n\n");
printf("\t\t Press any key to return......");
getch();
}
//将一条记录插入文件
void InsertToFile()
{
FILE *fp; /*定义指向文件的指针*/
user *info; /*指向追加信息的指针*/
char filename[10]; /*保存文件名*/
float temp; /*临时变量*/
clrscr(); /*清屏*/
gotoxy(15,8);
printf("*************WageManage System************");
gotoxy(15,10);
printf("|----------------------------------------|");
gotoxy(15,11);
printf("| UserNo | UserName | Wage |");
gotoxy(15,12);
printf("|----------|--------------------|--------|");
info=(user *)malloc(sizeof(user)); /*申请追加信息的空间*/
if(!info)
{
printf("\t\t Out of memory"); /*没有空间,内存溢出*/
exit(0); /*结束程序*/
}
info->next=NULL; /*新信息的后继为空*/
info->prior=NULL; /*新信息的前驱为空*/
gotoxy(15,13);printf("|");
gotoxy(26,13);printf("|");
gotoxy(47,13);printf("|");
gotoxy(56,13);printf("|");
gotoxy(16,13);
inputs(info->UserNo,10); /*输入编号并校验*/
gotoxy(27,13);
inputs(info->UserName,20); /*输入姓名并校验*/
gotoxy(48,13);
scanf("%f",&temp); /*输入基本工资*/
info->Wage=temp;
info->OtherWage=0; /*扣款为0*/
printf("\t |----------|--------------------|--------|");
printf("\n\n\n\t Enter file name to save as follows e:\\data.txt:\n"); /*提示输入文件名*/
printf("\n\n\n");
gotoxy(15,20);
scanf("%s",filename);
if((fp=fopen(filename,"ab")) == 0) /*打开文件*/
{
printf("\t\t Can't open the file\n");
printf("\n\n\n");
printf("\t\t Press any key to return......");
getch();
}
if(1!=fwrite(info,sizeof(user),1,fp)) /*向文件中追加记录*/
{
printf("\t\t file write error!!!\n"); /*写函数返回值不为1,说明写入错误*/
return; /*返回*/
}
gotoxy(15,25);
printf("Insert to file sucess!\n");/*显示追加成功*/
fclose(fp);/*关闭文件*/
printf("\n\n\n");
gotoxy(15,30);
printf("Press any key to return");
getch();
}
/*索引*/
void IndexSort()
{
user *p,*q,*temp,*head; /*定义临时指针*/
clrscr();/*清屏*/
head=First->next; /*将原表的头指针所指的下一个结点作头指针*/
First->next=NULL; /*第一个结点为新表的头结点*/
Last=First; /*尾指针等于头指针*/
while(head!=NULL) /*当原表不为空时,进行排序*/
{
temp=head; /*取原表的头结点*/
head=head->next; /*原表头结点指针后移*/
p=First; /*设定移动指针p,从头指针开始*/
q=First; /*设定移动指针q做为p的前驱,初值为头指针*/
while(strcmp(temp->UserNo,p->UserNo)>0&&p!=NULL) /*作编号比较*/
{
q=p; /*待排序点值大,应往后插,所以新表指针后移*/
p=p->next;
}
if(p==q) /*p==q,说明待排序点值小,应排在首位*/
{
temp->next=p; /*待排序点的后继为p*/
p->prior=temp; /*p的前驱结点指向待排序结点*/
First=temp; /*新头结点为待排序点*/
First->prior=NULL; /*头指针的前驱为空*/
}
else /*待排序点应插入在中间某个位置q和p之间,如p为空则是尾部*/
{
temp->next=p; /*t的后继是p*/
temp->prior=q; /*t的前驱是q*/
q->next=temp; /*q的后继是temp*/
if(p==NULL) /*判p是否为空*/
Last=temp; /*将temp赋值为尾指针*/
else
p->prior=temp; /*否则将temp赋值给p的前驱*/
}
}
printf("index sucess!!!\n");/*索引排序成功*/
List();
}
//工资排序
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -