當前位置:編程學習大全網 - 編程語言 - 看到的都進來看看!C++編程題!!!

看到的都進來看看!C++編程題!!!

這是壹個職工管理系統,自己把名稱改壹改就行了

#include<stdio.h>

#include<conio.h>

#include<malloc.h>

#include<string.h>

typedef struct ZHIGONG

{

char zhigongNumber[10];/*職工號*/

char zhigongName[20];/*職工姓名*/

char zhigongsex[4]; /*職工性別*/

char zhigongage[10]; /*出生年月*/

char zhigongedu[10];/*學歷*/

char zhigongposition[30]; /*職務*/

char zhigongwage[1000]; /*工資*/

struct ZHIGONG *next;

}ZHIGONG;

ZHIGONG *headLink;/*鏈表表頭指針*/

/*以下是函數聲明*/

void ReadInfoFormFile(void);

void DesplayMenu(void);

void CreateHeadLink(void);

ZHIGONG *MallocNode(void);

void GetInformation(ZHIGONG *t);

void InsertOneNode(ZHIGONG *t);

void DesplayInfoByzhigongwage(void);

void DesplayInfoByezhigongedu(void);

void DesplayOneNode(ZHIGONG *t);

void DeleteNodeByzhigongNumber(void);

void OutputInformation(void);

void ChangeMarkByzhigongName(void);

void CompositorByTotalzhigongwage(void);

void CompositorByTotalzhigongedu(void);

void SaveLinkToFile(void);

int choose;/*用於接受用戶的選擇*/

/*主函數*/

void main()

{

CreateHeadLink();

ReadInfoFormFile();

DesplayMenu();

SaveLinkToFile();

}

/************************************

函數功能:從文件中讀職工信息到鏈表中

************************************/

void ReadInfoFormFile(void)

{

FILE *fp;

ZHIGONG *p;

fp=fopen("zhigong.txt","r");

if(!fp)

{

printf("文件不存在\n");

return;

}

p=MallocNode();

while(fscanf(fp,"%s%s%s%s%s%s%s",p->zhigongNumber,p->zhigongName,p->zhigongsex,

p->zhigongage,p->zhigongedu,p->zhigongposition,p->zhigongwage))

{

InsertOneNode(p);

p=MallocNode();

}

fclose(fp);

}

/************************************

函數功能:顯示菜單,根據用戶的輸入

完成相應的功能

************************************/

void DesplayMenu(void)

{

ZHIGONG *p;

printf("-------請選擇相應功能------------\n\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("| 9 退出 |\n\n");

scanf("%d",&choose);/*取得用戶的選擇*/

switch(choose)

{

case 1:

p=MallocNode();/*先申請壹個新結點*/

GetInformation(p);/*要求用戶輸入信息到新結點中*/

InsertOneNode(p);/*將新結點加到鏈表中*/

break;

case 2:

OutputInformation();/*顯示所有職工的信息*/

break;

case 3:

DesplayInfoByzhigongwage();/*根據用戶輸入的職工工資顯示該職工的信息*/

break;

case 4:

DesplayInfoByezhigongedu(); /*根據用戶輸入的職工學歷顯示該職工的信息*/

break;

case 5:

CompositorByTotalzhigongwage();/* 按工資排序*/

break;

case 6:

CompositorByTotalzhigongedu();/* 按學歷排序*/

break;

case 7:

DeleteNodeByzhigongNumber();/*根據用戶輸入的職工號刪除該職工信息*/

break;

case 8:

ChangeMarkByzhigongName();/*根據用戶輸入的職工姓名修改該職工信息*/

break;

case 9:

SaveLinkToFile();/*保存數據後再退出*/

free(headLink);

default:

break;

}

DesplayMenu();/*遞歸調用*/

}

/************************************

函數功能:建立鏈表表頭

************************************/

void CreateHeadLink(void)

{

ZHIGONG *p;

p=(ZHIGONG*)malloc(sizeof(ZHIGONG));

headLink=p;

p->next=NULL;

}

/****************************************

函數功能:申請壹個新結點,並將其初始化

*****************************************/

ZHIGONG *MallocNode(void)

{

ZHIGONG *p;

int i;

p=(ZHIGONG*)malloc(sizeof(ZHIGONG));

if(p==NULL)

return NULL;

for(i=0;i<10;i++)

p->zhigongNumber[i]='\0';

for(i=0;i<20;i++)

p->zhigongName[i]='\0';

for(i=0;i<4;i++)

p->zhigongsex[i]='\0';

for(i=0;i<10;i++)

p->zhigongage[i]='\0';

for(i=0;i<10;i++)

p->zhigongedu[i]='\0';

for(i=0;i<30;i++)

p->zhigongposition[i]='\0';

for(i=0;i<1000;i++)

p->zhigongwage[i]='\0';

p->next=NULL;

return p;

}

/************************************

函數功能:取得用戶輸入的職工信息

************************************/

void GetInformation(ZHIGONG *t)

{

printf("請輸入職工號:\n");

scanf("%s",t->zhigongNumber);

printf("請輸入職工姓名:\n");

scanf("%s",t->zhigongName);

printf("請輸入職工性別:\n");

scanf("%s",t->zhigongsex);

printf("請輸入職工出生年月:\n");

scanf("%s",t->zhigongage);

printf("請輸入職工學歷:\n");

scanf("%s",t->zhigongedu);

printf("請輸入職工職位:\n");

scanf("%s",t->zhigongposition);

printf("請輸入職工工資:\n");

scanf("%s",t->zhigongwage);

}

/************************************

函數功能:在鏈表的結尾處增加壹個結點

************************************/

void InsertOneNode(ZHIGONG *t)

{

ZHIGONG *p;

p=headLink;

while(p->next)

{

p=p->next;

}

p->next=t;

}

/*************************************************

函數功能:根據用戶輸入的職工工資顯示該職工的信息

**************************************************/

void DesplayInfoByzhigongwage(void)

{

ZHIGONG *p;

char zhigongwage[1000];

char flag=0;

p=headLink->next;

printf("請輸入職工的工資:\n");

scanf("%s",zhigongwage);

while(p)

{

if(strcmp(p->zhigongwage,zhigongwage)==0)

{

printf("職工號\t姓名\t性別\t出生年月\t學歷\t職務\t工資\n\n");

DesplayOneNode(p);

flag=1;

break;

}

p=p->next;

}

if(!flag)

printf("對不起,不存在工資為%s的職工\n",zhigongwage);

}

/************************************************

函數功能:根據用戶輸入的職工學歷顯示該職工的信息

*************************************************/

void DesplayInfoByezhigongedu(void)

{

ZHIGONG *p;

char zhigongedu[10];

char flag=0;

p=headLink->next;

printf("請輸入職工學歷:\n");

scanf("%s",zhigongedu);

while(p)

{

if(strcmp(p->zhigongedu,zhigongedu)==0)

{

printf("職工號\t姓名\t性別\t出生年月\t學歷\t職務\t工資\n\n");

DesplayOneNode(p);

flag=1;

break;

}

p=p->next;

}

if(!flag)

printf("對不起,不存在學歷為 %s 的職工\n",zhigongedu);

}

/************************************

函數功能:輸出壹個結點的信息

************************************/

void DesplayOneNode(ZHIGONG *t)

{

printf("%s\t",t->zhigongNumber);

printf("%s\t",t->zhigongName);

printf("%s\t",t->zhigongsex);

printf("%s\t",t->zhigongage);

printf("%s\t",t->zhigongedu);

printf("%s\t",t->zhigongposition);

printf("%s\t\n",t->zhigongwage);

}

/*************************************************

函數功能:根據用戶輸入的職工號刪除該職工的信息

**************************************************/

void DeleteNodeByzhigongNumber(void)

{

char zhigongNumber[10];

ZHIGONG *p,*q;

char flag=0;

printf("請輸入要刪除的職工的職工號:");

scanf("%s",zhigongNumber);

p=headLink;

q=headLink->next;

while(q)

{

if(strcmp(q->zhigongNumber,zhigongNumber)==0)

{

p->next=q->next;

free(q);

flag=1;

break;

}

p=p->next;

q=q->next;

}

if(!flag)

{

printf("不存在該職工號的職工\n");

return;

}

printf("成功刪除\n");

}

/************************************

函數功能:顯示所有職工的信息

************************************/

void OutputInformation(void)

{

ZHIGONG *p;

p=headLink->next;

if(p==NULL)

{

printf("現在沒有職工信息,請先輸入職工信息\n\n");

return;

}

printf("職工號\t姓名\t性別\t出生年月\t學歷\t職務\t工資\n\n");

while(p)

{

DesplayOneNode(p);

p=p->next;

}

}

/*********************************************

函數功能:根據輸入的職工姓名修改員工的信息

**********************************************/

void ChangeMarkByzhigongName(void)

{

ZHIGONG *p;

char zhigongName[10];

char flag=0;

char zhigongedu,zhigongwage,zhigongage,zhigongNumber,zhigongsex,zhigongposition;

p=headLink->next;

printf("請輸入職工姓名:\n");

scanf("%s",zhigongName);

while(p)

{

if(strcmp(p->zhigongName,zhigongName)==0)

{

printf("請輸入新的職工號:\n");

scanf("%s",&zhigongNumber);

printf("請輸入新的學歷:\n");

scanf("%s",&zhigongedu);

printf("請輸入新的工資:\n");

scanf("%s",&zhigongwage);

printf("請輸入新的出生年月:\n");

scanf("%s",&zhigongage);

printf("請輸入新的性別:\n");

scanf("%s",&zhigongsex);

printf("請輸入新的職位:\n");

scanf("%s",&zhigongposition);

strcpy(p->zhigongposition,&zhigongposition);

strcpy(p->zhigongsex,&zhigongsex);

strcpy(p->zhigongNumber,&zhigongNumber);

strcpy(p->zhigongedu,&zhigongedu);

strcpy(p->zhigongwage,&zhigongwage);

strcpy(p->zhigongage,&zhigongage);

flag=1;

printf("修改成功\n");

break;

}

p=p->next;

}

if(!flag)

printf("對不起,不存在姓名為 %s 的職工\n",zhigongName);

}

/************************************

函數功能:保存鏈表數據到文件中

************************************/

void SaveLinkToFile(void)

{

ZHIGONG *p;

FILE *fp;

p=headLink->next;

if(p==NULL)

{

printf("現在沒有職工信息,請先輸入職工信息\n\n");

return;

}

fp=fopen("zhigong.txt","w+");

if(!fp)

{

printf("文件不存在\n");

return;

}

while(p)

{

fprintf(fp,"%s%s%s%s%s%s%s",p->zhigongNumber,p->zhigongName,p->zhigongsex,

p->zhigongage,p->zhigongedu,p->zhigongposition,p->zhigongwage);

p=p->next;

}

fclose(fp);

}

/************************************

函數功能:按職工工資排序

************************************/

void CompositorByTotalzhigongwage(void)

{

ZHIGONG exchange,*r,*p,*q;

r=headLink->next;

if(r==NULL)

{

printf("現在還沒職工信息,請先輸入職工信息\n");

return;

}

while(r)/*兩層while循環實現排序*/

{

p=r;

q=r->next;

while(q)

{

if((p->zhigongwage)>(p->zhigongwage))

{

strcpy(exchange.zhigongNumber,q->zhigongNumber);/*先復制q結點信息到exchange*/

strcpy(exchange.zhigongName,q->zhigongName);

strcpy(exchange.zhigongsex,q->zhigongsex);

strcpy(exchange.zhigongage,q->zhigongage);

strcpy(exchange.zhigongedu,q->zhigongedu);

strcpy(exchange.zhigongposition,q->zhigongposition);

strcpy(exchange.zhigongwage,q->zhigongwage);

strcpy(q->zhigongNumber,p->zhigongNumber);/*再復制p結點信息到q*/

strcpy(q->zhigongName,p->zhigongName);

strcpy(q->zhigongsex,p->zhigongsex);

strcpy(q->zhigongage,p->zhigongage);

strcpy(q->zhigongedu,p->zhigongedu);

strcpy(q->zhigongposition,p->zhigongposition);

strcpy(q->zhigongwage,p->zhigongwage);

strcpy(p->zhigongNumber,exchange.zhigongNumber);/*最後復制exchange結點信息到p*/

strcpy(p->zhigongName,exchange.zhigongName);

strcpy(p->zhigongsex,exchange.zhigongsex);

strcpy(p->zhigongage,exchange.zhigongage);

strcpy(p->zhigongedu,exchange.zhigongedu);

strcpy(p->zhigongposition,exchange.zhigongposition);

strcpy(p->zhigongwage,exchange.zhigongwage);

}

q=q->next;

}

r=r->next;

}

OutputInformation();

}

/************************************

函數功能:按職工學歷排序

************************************/

void CompositorByTotalzhigongedu(void)

{

ZHIGONG exchange,*r,*p,*q;

r=headLink->next;

if(r==NULL)

{

printf("現在還沒職工信息,請先輸入職工信息\n");

return;

}

while(r)/*兩層while循環實現排序*/

{

p=r;

q=r->next;

while(q)

{

if((q->zhigongedu)>(p->zhigongedu))

{

strcpy(exchange.zhigongNumber,q->zhigongNumber);/*先復制q結點信息到exchange*/

strcpy(exchange.zhigongName,q->zhigongName);

strcpy(exchange.zhigongsex,q->zhigongsex);

strcpy(exchange.zhigongage,q->zhigongage);

strcpy(exchange.zhigongedu,q->zhigongedu);

strcpy(exchange.zhigongposition,q->zhigongposition);

strcpy(exchange.zhigongwage,q->zhigongwage);

strcpy(q->zhigongNumber,p->zhigongNumber);/*再復制p結點信息到q*/

strcpy(q->zhigongName,p->zhigongName);

strcpy(q->zhigongsex,p->zhigongsex);

strcpy(q->zhigongage,p->zhigongage);

strcpy(q->zhigongedu,p->zhigongedu);

strcpy(q->zhigongposition,p->zhigongposition);

strcpy(q->zhigongwage,p->zhigongwage);

strcpy(p->zhigongNumber,exchange.zhigongNumber);/*最後復制exchange結點信息到p*/

strcpy(p->zhigongName,exchange.zhigongName);

strcpy(p->zhigongsex,exchange.zhigongsex);

strcpy(p->zhigongage,exchange.zhigongage);

strcpy(p->zhigongedu,exchange.zhigongedu);

strcpy(p->zhigongposition,exchange.zhigongposition);

strcpy(p->zhigongwage,exchange.zhigongwage);

}

q=q->next;

}

r=r->next;

}

OutputInformation();

}

參考資料:

網上

  • 上一篇:洛陽有哪些研究所?
  • 下一篇:少兒編程班學費
  • copyright 2024編程學習大全網