因為周邊很多自學者,並且最近有朋友在寫這個管理系統,所以就對之前隨便寫的做了完善,並且附上了詳細的注釋,希望對大家有所幫助,同時以後忘記了也可以回過頭看看。話不多說,該注意的都在**裡了
#include
#include
#include
#include
/*函式宣告*/
void shouye();
void addmessage();
void chazhao();
void shanchu();
void duqu();
int panduan();
int denglu();
void error();
//定義乙個學生的資料型別
struct student
;//主函式
int main(void)
void error() //當乙個東西反覆使用多於兩次時,就考慮用函式來實現。相同的**不多寫,只呼叫函式
//首頁函式
void shouye(void)
; //定義
while(1)
switch(xuanze[0])}}
//新增資訊函式
void addmessage()
printf("請輸入學生的姓名,學號,用空格隔開,姓名為0時終止輸入:"); //提示使用者究竟怎樣輸入
scanf("%s%s",p1->name,p1->num);
while(strcmp(p1->name,flag) != 0 ) //輸入環節,名字為0則退出
printf("請輸入學生的姓名,學號,用空格隔開,姓名為0時終止輸入:");
scanf("%s%s",p1->name,p1->num);
}free(p1);
p1 = null;
p2->next = null;
system("pause");
return ;
}//判斷函式,判斷寫入的學號是否已經存在
int panduan(struct student *p2) //使用結構體指標作為引數,因為考慮到要把結構體內容都寫入檔案
,name[20] = ;
file *fp = fopen("e:\\student.txt","r"); //以唯讀的方式開啟檔案
while(fscanf(fp,"%s%s",num,name) != eof) //考慮到儲存是:學號 姓名\n 這樣的格式。fscanf不會讀入空格和回車,類似這樣寫。正好每次讀取一行,每行的學號在num陣列裡,姓名在name陣列裡。如果資訊很多也可採取此辦法
}fclose(fp); //先關閉,再用追加的方式開啟。此時檔案指標位於檔案末尾
fp = fopen("e:\\student.txt","a+");
fprintf(fp,"%s %s\n",p2->num,p2->name); //如果遍歷到檔案末尾沒找到一樣的,證明這個學號是可行的,寫入。否則一定會在中途找到後就結束此函式。寫入的方式是:學號 姓名\n。有便於我們查詢。
fclose(fp);
return 1;
}//查詢函式
void chazhao(void)
,name[20] = ,num[20];
file *fp = fopen("e:\\student.txt","r"); //查詢,所以用唯讀方式開啟
system("cls");//從首頁跳轉到查詢函式,應該清屏
printf("請輸入您想要查詢的同學學號:");
scanf("%s",num);
while(fscanf(fp,"%s%s",xuehao,name)!=eof) //如果沒有到末尾,就繼續讀取這一行的學號和名字,分別放到陣列裡,之前的會被覆蓋,兩個陣列可迴圈使用,減少記憶體消耗
}printf("查無此人\n"); //如果程式能執行到該語句,證明遍歷完也沒找到這個人,所以列印提示資訊。暫停,並關閉檔案
system("pause");
fclose(fp);
return ;
}//刪除函式
void shanchu(void)
,name[20] = ,num[20],xin[500][50] = ; //用xin這個二維陣列儲存刪除後整個檔案內容,並重新寫入檔案更換掉原檔案
file *fp = fopen("e:\\student.txt","r");
if(!denglu()) //如果登陸失敗,退出。
return ;
duqu(); //呼叫讀取函式,將檔案名單展示出來,方便輸學號
printf("\n請輸入您想要刪除的同學學號:");
scanf("%s",num);
while(fscanf(fp,"%s%s",xuehao,name)!=eof)
else //刪除同學前的都寫入xin陣列,當遍歷到那個同學的時候,沒有寫入,繼續讀取下一行寫入xin陣列,這就相當於將那位同學的資訊沒有存進來。最後將xin陣列儲存,自然就沒有那位同學了
}if(flag == 0) //如果為0,證明刪除的學號不存在
else //這裡表示刪除的人在裡面
printf("刪除完成!\n"); //提示使用者刪除完成了,關閉檔案結束操作
fclose(fp);
system("pause");
}duqu(); //將刪除後的檔案再讀取一遍展現給使用者,更具人性化吧。。。。
fclose(fp);
return ;
}//刪除操作時登陸函式
int denglu(void) //刪除屬於敏感操作,可考慮加上乙個登陸限制。返回值是返回乙個flag,是否成功登陸
; //賬號名和輸入的賬號名
int mima; //密碼
printf("請輸入管理員賬號:");
scanf("%s",zhanghao1);
if(strcmp(zhanghao,zhanghao1) == 0) //如果賬號正確,則驗證密碼
}else //賬號錯誤,提示錯誤資訊並返回,避免多次試驗盜密碼。。。。這裡其實還可以讓其重試,限制重試次數。超過次數就返回。後者更好
printf("成功登陸!\n");
system("pause");
return 1; //成功登陸,返回1
}//列印資訊函式
void duqu(void)
,name[20] = ;
file *fp = fopen("e:\\student.txt","r"); //其實檔案都有可能開啟失敗(比如檔案被某些東西占用)導致後續操作出現不可預知的錯誤,所以檢測是很有必要的。不過有些地方省略了
if(fp == null)
system("cls"); //讀取資訊前先清屏
printf("\n目前已有的學生資訊如下:\n");
while(fscanf(fp,"%s%s",num,name)!=eof) //讀取檔案中一行學生的學號和姓名,直到檔案結束(eof)
printf("姓名:%s 學號:%s\n",name,num); //將讀取到的資訊列印出來。如果是讀取完再列印到螢幕,未免太佔記憶體了。這裡還是反覆使用兩個陣列
fclose(fp);
printf("\n");
system("pause");
}
對前面資訊管理系統的完善
因為周邊很多自學者,並且最近有朋友在寫這個管理系統,所以就對之前隨便寫的做了完善,並且附上了詳細的注釋,希望對大家有所幫助,同時以後忘記了也可以回過頭看看。話不多說,該注意的都在 裡了 include include include include 函式宣告 void shouye void add...
對前面資訊管理系統的完善
因為周邊很多自學者,並且最近有朋友在寫這個管理系統,所以就對之前隨便寫的做了完善,並且附上了詳細的注釋,希望對大家有所幫助,同時以後忘記了也可以回過頭看看。話不多說,該注意的都在 裡了 include include include include 函式宣告 void shouye void add...
資訊管理系統
輸入5個員工的資訊 輸入 每個員工含有成員名為 工號 姓名 基本工資 補貼 獎金 水電費 房租 實發工資 工資排名 編寫函式完成下列要求 1 輸入乙個員工的工號,查詢該員工的資訊並輸出,若不存在顯示沒找到 查詢 2 輸入乙個新員工的資訊,按工號順序將該員工的資訊插入後輸出 顯示 3 輸入乙個已存在員...