對前面資訊管理系統的完善

2021-07-27 04:47:55 字數 3800 閱讀 1361

因為周邊很多自學者,並且最近有朋友在寫這個管理系統,所以就對之前隨便寫的做了完善,並且附上了詳細的注釋,希望對大家有所幫助,同時以後忘記了也可以回過頭看看。話不多說,該注意的都在**裡了

#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 輸入乙個已存在員...