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、修改):");
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;
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("請輸入要查詢的編號
case 2:printf("請輸入要查詢的姓名:"),scanf("%s",swr.name);break;
case 3:printf("請輸入要查詢的性別(1、男,0、女
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;
***,&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;
***,&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;
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("請輸入職工生日(年月日用空格分隔
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語言程式
此程式功能 有一個指令碼叫a.vbs,儲存著msgbox 視窗混亂!如果雙擊執行會彈框。專 有個批處理 屬檔案a.bat,儲存著pause,只是暫停功能,如果雙擊後彈出cmd顯示 按任意鍵繼續 這程式執行a.vbs,等兩秒,執行15遍a.bat 跪求大神幫我註釋一下這個c語言程式 20 求大神幫我看...
求c語言大神詳細解釋一下的程式,求C語言大神詳細解釋一下的程式
define cg motion piston,dt,vel,omega,time,dtime thread t 定義 有一個很好的回答,另補充一下,計算力和力矩有一個函式很好用 pute force and moment c語言小白求大神幫忙詳細解釋一下下面的程式!int ment2 char s...
幫忙解決一下c語言問題,幫忙解決一下C語言問題!!!
第一次,a f 0 f 0 返回s即1.0所以a 1.0 第二次,a f 1 f 1 進入後,執行一次迴圈,s 1.0 i就是說s s 1.0 1,所以s 2.0這樣f 1 的返回值是2 a f 1 就是說a a 2.0上次a 1.0,所以這次a 3.0第三次,a f 2 f 1 進入後,執行兩次次...