c語言程式大神幫忙設計一下

時間 2021-08-30 10:55:23

1樓:自我程式設計

按照題目要求:

1、實現檔案寫入功能,一次寫入一個職工資訊。

2、實現查詢功能(包含4種條件查詢)。

3、實現資訊刪除和修改並寫入檔案。

根據題意,資料用結構陣列儲存,且職工編號唯一性,因此單獨兩個函式計算資訊長度和編號。

除條件查詢函式和讀取檔案的函式,不會自行free釋放記憶體。如你寫**呼叫,注意自行寫free語句釋放。

下面是**:

#include

#include

#include

#include

#include

#define path "c:\\worker.data"

typedef struct worker//職員

int id;

char name[20];

int ***;//0:女。1:男

int byy;

int bmm;

int bdd;

}wr;

int write2file(char path);//寫入檔案,成功返回1,失敗返回-1

int getlen(char path);//重新計算資訊長度,成功返回1,失敗返回-1

int getmaxid(char path);//獲取最大的id,避免id重複,成功返回1,失敗返回-1

wr *readformfile(char path);//讀取檔案內容到結構體陣列,成功返回陣列,失敗返回null

void showwrs();//列印輸出檔案所有內容

wr *selectby(wr *wrs,int n);//根據條件查詢,查詢成功返回查到的第一個節點(對於唯一的編號而言是精準查詢),失敗返回null。

//注意:該函式不會自動釋放wrs記憶體,單獨呼叫後需單獨釋放。單獨呼叫n傳0,在修改模組中呼叫n傳1

int init();//初始化引數

int updatewr();//更新,成功返回1,失敗返回-1

int showmenu();//選單

int len=0;

int id=0;

int main()

init();

if(showmenu()==-1) return 1;

return 0;

int showmenu()

int n;

wr *wrs=null;;

while(1)

n=0;

printf("【職工檔案管理系統】\n1、輸入一個職工資訊\n2、查詢所有職工資訊\n3、條件查詢職工資訊\n4、修改刪除職工資訊\n");

while(n<1 || n>4) scanf("%d",&n);

switch(n)

case 1:if(write2file(path)==-1) return -1; break;

case 2:showwrs(); break;

case 3:

wrs=readformfile(path);

selectby(wrs,0);

free(wrs);

break;

case 4:if(updatewr()==-1) return -1;break;

fflush(stdin);

printf("按任意鍵繼續。。。。。"),getch();

system("cls");

int init()

if(getlen(path)!=-1 && getmaxid(path)!=-1) return 1;

return -1;

int updatewr()

int i,del=-1;

wr *wr=null,*wrs=null;

file *fp=null;

wrs=readformfile(path);

if(!wrs) return -1;

wr=selectby(wrs,1);

printf("請輸入操作(1、刪除,2、修改):");

while(del!=2 && del!=1)scanf("%d",&del);

if(del==2)

printf("請輸入修改後職工資訊:\n");

printf("請輸入職工姓名:"),scanf("%s",wr->name);

printf("請選擇職工性別(0:女。1:男):"),scanf("%d",&wr->***);

printf("請輸入職工生日(年月日用空格分隔):"),scanf("%d%d%d",&wr->byy,&wr->bmm,&wr->bdd);

if(remove(path)==-1) return -1;

if(!(fp=fopen(path,"w"))) return -1;

for(i=0;iif(del==2 ||(del==1 && wr!=&wrs[i]))

fprintf(fp,"%d %s %d %d %d %d%s",wrs[i].id,wrs[i].name,wrs[i].

***,wrs[i].byy,wrs[i].bmm,wrs[i].

bdd,"\n");

printf("更新成功!\n");

fclose(fp);

free(wrs);

return 1;

wr *selectby(wr *wrs,int n)

int i;

wr swr,*sp=null;

if(!wrs) return null;

while(n<1 || n>4)printf("請輸入篩選條件(1、編號,2、姓名,3、性別,4、出生日期):"),scanf("%d",&n);

switch(n)

case 1:printf("請輸入要查詢的編號:"),scanf("%d",&swr.id);break;

case 2:printf("請輸入要查詢的姓名:"),scanf("%s",swr.name);break;

case 3:printf("請輸入要查詢的性別(1、男,0、女):"),scanf("%d",&swr.***);break;

case 4:printf("請輸入職工出生日期(年月日用空格分隔):"),scanf("%d%d%d",&swr.

byy,&swr.bmm,&swr.bdd);break;

printf("%8s %8s %8s %10s\n","職工編號","職工姓名","職工性別","職工年齡");

for(i=0;iif((n==1 && wrs[i].id==swr.id) ||(n==2 && strcmp(wrs[i].

name,swr.name)==0) ||(n==3 && wrs[i].***==swr.

***) ||(n==4 && wrs[i].byy==swr.byy && wrs[i].

bmm==swr.bmm && wrs[i].bdd==swr.

bdd))

if(sp==null) sp=&wrs[i];

printf("%8d %8s %8s %04d-%02d-%02d\n",wrs[i].id,wrs[i].name,wrs[i].

***?"男":"女",wrs[i].

byy,wrs[i].bmm,wrs[i].bdd);

return sp;

void showwrs()

int i;

wr *wrs=null;

wrs=readformfile(path);

if(wrs)

printf("%8s %8s %8s %10s\n","職工編號","職工姓名","職工性別","職工年齡");

for(i=0;iprintf("%8d %8s %8s %04d-%02d-%02d\n",wrs[i].id,wrs[i].name,wrs[i].

***?"男":"女",wrs[i].

byy,wrs[i].bmm,wrs[i].bdd);

free(wrs);

int getlen(char path)

file *fp=null;

wr wr;

if(!(fp=fopen(path,"r"))) return -1;

len=0;

while((fscanf(fp,"%d%s%d%d%d%d",&wr.id,wr.name,&wr.

***,&wr.byy,&wr.bmm,&wr.

bdd))!=-1)

len++;

fclose(fp);

return 1;

int getmaxid(char path)

file *fp=null;

wr wr;

if(!(fp=fopen(path,"r"))) return -1;

len=0;

while((fscanf(fp,"%d%s%d%d%d%d",&wr.id,wr.name,&wr.

***,&wr.byy,&wr.bmm,&wr.

bdd))!=-1)

if(idfclose(fp);

return 1;

wr *readformfile(char path)

int i;

file *fp=null;

wr *wrs=null;

getlen(path);

if(!(fp=fopen(path,"r"))) return null;

if(len==0) return null;

wrs=(wr *)malloc(sizeof(wr)*len);

if(!wrs) return null;

i=0;

while((fscanf(fp,"%d%s%d%d%d%d",&wrs[i].id,wrs[i].name,&wrs[i].

***,&wrs[i].byy,&wrs[i].bmm,&wrs[i].

bdd))!=-1)i++;

fclose(fp);

return wrs;

int write2file(char path)

file *fp=null;

wr wr;

if(!(fp=fopen(path,"a"))) return -1;

wr.id=id++;

printf("-----------------------------\n");

printf("請輸入職工姓名:"),scanf("%s",wr.name);

printf("請選擇職工性別(0:女。1:男):"),scanf("%d",&wr.***);

printf("請輸入職工生日(年月日用空格分隔):"),scanf("%d%d%d",&wr.byy,&wr.bmm,&wr.bdd);

printf("-----------------------------\n\n");

fprintf(fp,"%d %s %d %d %d %d%s",wr.id,wr.name,wr.***,wr.byy,wr.bmm,wr.bdd,"\n");

fclose(fp);

len++;

return len;

c語言程式,幫忙詳細分析一下,C語言程式,幫忙詳細分析一下!

天堂妹兒 選b,等於10。首先是t 3 f t,3 也就是4 f t,3 然後是4 t 2 f t,2 算出來是7 f t,2 然後是7 t 1 f t,1 算出來是9 f t,1 然後是9 t 0 f t,0 算出來是10 f t,0 由於此時n 0,所以返回,結果為10。 草野閒羊 選b,等於1...

c 程式,幫忙編寫一下,c 程式,幫忙編寫一下

include stdafx.h include using namespace system using namespace std int main array args int p1 a 0 int b 19 int p2 b 0 int n cin n void firstshow int ...

請大神幫忙設計完整的c語言程式,實現”在4乘4的棋盤上放置棋,要求每一行每一列上只能放置”

樓主你好。見醜了。我用了一個窮舉的方法。我寫的 的好處在於易於擴充套件,n代表了棋盤的大小,你可以任意修改,不止是4。經過幾次優化後變為以下 採用回溯法 include include define n 6 define noprinting 標誌是否列印陣列 如果只是計算可能的情況的話,根本不需要...