因为字数限制删掉了修改,求大佬帮忙!!解救秃头的少女吧!!求求了!!
#include <stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<malloc.h>
#define INITLISTSIZE 500
#define LISTINCREMENT 20
#define MAX 32767
#define N 500
int n;//n为当前职工数
typedef struct worker //员工信息存储结构
{
char sex; //男:M 女:W
char name[N]; //姓名
int salary; //工资
int bonus; //奖金
char position[N]; //职务
int age; //年龄
char num[N]; //工号
int order;
}workers;
typedef struct SqList //顺序表存储结构
{
workers *elem;
int listsize;
int length;
}SqList;
//初始化
void Init(SqList &L)
{
L.elem=(worker *)malloc(INITLISTSIZE*sizeof(worker));
L.length=0;
}
//菜单
int Menu()
{
int choice;
printf("\t职 工 信 息 管 理 系 统\n");
printf("==================员工信息管理==================\n ");
printf(" 1.录入职工信息\n ");
printf(" 2.修改职工信息\n ");
printf(" 3.浏览职工信息\n ");
printf(" 4.查询职工信息\n ");
printf(" 5.删除职工信息\n ");
printf(" 6.保存职工信息\n ");
printf(" 7.读取职工信息\n ");
printf(" 8.新增职工信息\n ");
printf(" 0.退出\n ");
printf("输入你选择的序号:");
scanf("%d",&choice);
return choice;
}
//录入员工信息
void Create(SqList &L)
{
int i=n,j;
Init(L);
while(1)
{
printf("请输入工号");
printf("(ps:输入0则返回菜单):\n");
scanf("%s",L.elem[i].num);
for (j = 0; j<i; j++)
{
if (strcmp(L.elem[i].num, L.elem[j].num) == 0)
{
printf("该工号已存在,请重新输入!\n");
break;
}
}
if (strcmp(L.elem[i].num,"0") == 0)
break;
printf("请输入姓名:");
scanf("%s",L.elem[i].name);
printf("请输入年龄:");
scanf("%d",&L.elem[i].age);
printf("请输入工资:");
scanf("%d",&L.elem[i].salary);
printf("请输入奖金:");
scanf("%d",&L.elem[i].bonus);
printf("请输入职位:\n");
scanf("%s",L.elem[i].position);
printf("请输入性别:\n");
getchar();
scanf("%c",&L.elem[i].sex);
n++;
i++;
}
L.length=n;
}
//插入
void Insert(SqList &L)
{
int i,j,flag=1,m;
i=n;
printf("请输入待增加信息的员工数:\n");
scanf("%d", &m);
if (m > 0)
{
do
{
flag=1;
while(flag)
{
flag=0;
printf("请输入工号:");
printf("\n提示:输入0返回主菜单!\n");
scanf("%s",L.elem[i].num);
if (strcmp(L.elem[i].num, "0") == 0)
break;
for (j = 0; j <i; j++)
{printf(" 7.读取职工信息\n ");
if (strcmp(L.elem[i].num, L.elem[j].num) == 0)
{
printf("该工号已存在,请重新输入!\n");
flag=1;
break;
}
}
}
printf("请输入性别:");
scanf("%s",&L.elem[n].sex);
printf("请输入姓名:");
getchar();
gets(L.elem[n].name);
printf("请输入工资:");
scanf("%d",&L.elem[n].salary);
printf("请输入奖金:");
scanf("%d",&L.elem[n].bonus);
printf("请输入职务:");
scanf("%s",L.elem[n].position);
printf("请输入年龄:");
scanf("%d",&L.elem[n].age);
printf("提示:已经完成一条记录的添加!\n");
L.length++;
if (0 == flag)
i++;
}while(i<n+m);
}
n += m;
printf("员工信息增加完毕!!!\n");
system("pause");
}
//按工资直接插入排序
void Insert_Sort(SqList &L)
{
workers p;
int i,j;
for (i=0;i<n;i++)
if (L.elem[i].salary>L.elem[i-1].salary)
{
p=L.elem[i];
for (j=i-1;j>=0&&L.elem[j].salary<p.salary; j--)
L.elem[j+1]=L.elem[j];
L.elem[j+1]=p;
}
workers *t;
i=0;
for(t=L.elem;t<L.elem+n;t++)
{
L.elem[i].order=i+1;
i++;
}
}
//按学号快速排序
void Quick(SqList &L,int low,int high)
{
workers nnum=L.elem[low];
int i=low,j=high;
if(low>=high)
return;
while(i<j)
{
while(i<j&&L.elem[j].num>=nnum.num)
--j;//从右往左找工号比枢轴小的
L.elem[i]=L.elem[j];//j移动到i
while(i<j&&L.elem[i].num<=nnum.num)
++i;//从左往右找工号比枢轴大的
L.elem[j]=L.elem[i];//i移动到j
}
L.elem[i]=nnum;
Quick(L,low,i-1);
Quick(L,i+1,high);
}
//按奖金折半插入排序
void sort2(SqList &L)
{
int i, j, mid, low, high;
workers temp;
for (i = 1; i < n; i++)
{
if(L.elem[i].bonus<L.elem[i-1].bonus)
{
temp = L.elem[i];
low = 0;
high = i-1;
while (low <= high)
{
mid = (low + high) / 2;
if (temp.bonus < L.elem[mid].bonus)
high = mid - 1;
else
low = mid + 1;
}
for (j = i - 1; j >= high+1; j--)
L.elem[j+1]=L.elem[j];
L.elem[high+1]=temp;
}
}
}
//显示
void display(SqList L)
{
int i;
printf("共有%d职工的信息:\n", n);
if (0!=n)
{
printf("工号 \t姓名 \t年龄\t性别\t职务\t工资 \t奖金\n");
printf("--------------------------------------------------------------------\n");
for (i=0;i<n;i++)
{
printf("%s\t%s\t%d \t%c \t%s\t%d \t%d\n",L.elem[i].num,L.elem[i].name,L.elem[i].age,
L.elem[i].sex,L.elem[i].position,L.elem[i].salary,L.elem[i].bonus);
}
}
system("pause");
}
//按姓名查找
void search1(SqList &L) {
int low = 0, high = n, mid, flag = 0;
printf("\n");
printf("按姓名查找-->请输入要查找的姓名:");
char a[15];
scanf("%s", a);
while (low <= high) {
mid = (low + high) / 2;
if (strcmp(a, L.elem[mid].name) == 0) {
flag = 1;
break;
} else if (strcmp(a, L.elem[mid].name)>0)
low = mid + 1;
else
high = mid - 1;
}
if (flag == 1) {
printf("查找成功-->该职工信息为:\n");
printf("工号:%s \n姓名:%s \n工资:%d \n奖金:%d \n年龄:%d \n职务:%s \n性别:%c\n",L.elem[mid].num,L.elem[mid].name, L.elem[mid].salary,L.elem[mid].bonus,L.elem[mid].age,L.elem[mid].position,L.elem[mid].sex);
}
else {
printf("该职工不存在!");
}
}
//按工号查找
void Binary_Search(SqList &L)
{
char search_number[11];
printf("输入要查找的工号:");
scanf("%s",search_number);
int low=0,high=n-1;
while(low<=high)
{
int mid=(low+high)/2;
if(strcmp(L.elem[mid].num,search_number)==0)
{
printf("工号:%s \n姓名:%s \n工资:%d \n奖金:%d \n年龄:%d \n职务:%s \n性别:%c\n",L.elem[mid].num,L.elem[mid].name, L.elem[mid].salary,L.elem[mid].bonus,L.elem[mid].age,L.elem[mid].position,L.elem[mid].sex);
return;
}
else if(strcmp(L.elem[mid].num,search_number)<0)
low=mid+1;
else if(strcmp(L.elem[mid].num,search_number)>0)
high=mid-1;
}
printf("错误!!!没有此职工信息!\n");
}
//查找
void search(SqList &L)
{
int item,flag;
printf("1.按工号查找\n");
printf("2.按姓名查找\n");
printf("3.返回菜单\n");
while(1)
{ printf("==========请输入查询职工信息的类型==========\n");
scanf("%d",&item);
flag=0;
switch(item)
{
case 1:
flag=1;Binary_Search(L);break;
case 2:
flag=1;search1(L);break;
case 3:return;
default:printf("输入错误");
}
}
}
//浏览
void Display(SqList &L)
{
int item,flag;
printf("1.按工号排序(由小到大)\n");
printf("2.按工资排序(由高至低)\n");
printf("3.按奖金排序(由低至高)\n");
printf("4.显示结果\n");
printf("5.返回菜单\n");
while(1)
{ printf("==========请输入浏览方式==========\n");
scanf("%d",&item);
flag=0;
switch(item)
{
case 1:
flag=1;Quick(L,1,n-1);break;
case 2:
flag=1;Insert_Sort(L);break;
case 3:flag=1;sort2(L);break;
case 4:flag=1;display(L);break;
case 5:return;
default:printf("输入错误");
}
}
}
//删除
void Del(SqList &L)
{
int i, j, flag = 0;
char s1[N];
printf("请输入要删除的职工的工号:\n");
scanf("%s", s1);
for (i = 0;i<n; i++)
{
if ((strcmp(L.elem[i].num, s1) == 0)||(strcmp(L.elem[i].name,s1)==0))
{
flag = 1;
//要删除职工后面的职工往前移一位
for (j=i;j<n-1;j++)
L.elem[j]= L.elem[j + 1];
}
}
if (0 == flag){
printf("该工号不存在!!!\n");
}
if (1 == flag){
printf("删除成功!!!");
//删除成功,职工数减1
n--;
}
system("pause");
}
//保存
void Save(SqList L)
{
int i;
FILE *fp;
if((fp=fopen("C:\\worker.txt","w"))==NULL)
{
printf("文件打开失败\n");
getchar();
exit(1);
}
for (i = 0; i < n; i++)
{
fprintf(fp, "%s %s %d %d %d %s %c\n", L.elem[i].num,L.elem[i].name,L.elem[i].age,L.elem[i].salary,L.elem[i].bonus,L.elem[i].position,L.elem[i].sex);
}
fclose(fp);
}
//文件读取
int Load(SqList &L)
{
int i = 0;
FILE *fp;
Init(L);
if ((fp = fopen("C:\\worker.txt", "r")) == NULL) exit(1);
//从文件读取信息
while (fscanf(fp, "%s %s %d %d %d %s %c\n", L.elem[i].num,L.elem[i].name,L.elem[i].age,L.elem[i].salary,L.elem[i].bonus,L.elem[i].position,L.elem[i].sex) == 7)
{
i++;
}
n =i;
printf("刷新成功!!!");
system("pause");
return 0;}
int main()
{
SqList L;
while(1)
{
switch(Menu())
{
case 1:Create(L);break;//录入
case 2:modify(L);break;//修改
case 3:Display(L);break;//浏览
case 4:search(L);break;//查找
case 5:Del(L);break;//删除
case 6:Save(L);break;//保存
case 7:Load(L);break;//读取
case 8:Insert(L);break;//插入
case 0:exit(0);
}
}
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: