乙個簡單的學生資訊管理系統

2022-08-27 00:48:10 字數 3840 閱讀 7678

昨天忽然想寫乙個小型的資訊管理系統了,用鍊錶和文字檔案儲存資訊,所以就回過頭把鍊錶看了一遍,下午的時候把框架打好了,學生資訊只有學生姓名和學號。程式功能只具備:1、新增學生資訊功能(內嵌查重功能),2、查詢功能(根據學號查詢),3、刪除學生資訊功能(內嵌一小小的登陸功能,登陸成功方可進行此操作)4、列印功能(把目前所有的學生資訊列印出來)

對於新增資訊這裡,我採取的是用鍊錶寫入資訊,每次寫入乙個學生資訊,都會去檢測是不是學號已經存在了。單次寫完後將這條鏈的所有資訊儲存在文字內。每個學生佔一行,姓名和學號用空格隔開。這裡就有乙個問題:如果我在這次寫入操作時,寫入的前後資料學號相同,它還是會當做有效的儲存起來。(因為我可能這次寫入了三個學生,在三個學生資訊輸入完成前,是沒有儲存的,所以輸入後面那個學號,只是和已經儲存好的資訊比對,導致可能寫入重複的學號。)

所以,在查重那裡,我覺得可以直接加上儲存的功能,如果當前的同學資訊有效,直接儲存。但是,重複的開啟關閉檔案肯定會導致執行效率降低的。

這裡還有乙個問題,也是以後寫類似東西應該注意的地方:資訊儲存時,應該把最重要的東西放在前面。

應該是 學號 姓名\n  而不是 姓名 學號\n。因為學號是唯一的,姓名可以重複,所以我們查詢和刪除都是通過學號進行,而放在前面有便於我們查詢,可以節省很多操作和時間。

還有就是關於儲存時回車鍵的儲存,在每行資訊後都應該是乙個回車鍵,換到檔案的下一行。但是在刪除那裡,我是通過乙個二維陣列來操作的,將每行資料都儲存在二維陣列內,如果找到學號了,那就跳到下一行,把本應放查詢的學號的同學資訊一行放下一行資訊,最後將整個陣列給重新寫入替換原來的資訊。在這裡出現了乙個bug:如果刪除的本身就是最後一行,那麼就會導致文字內格式出現錯誤。所以:寫檔案,回車符使用一定要小心!

回車符使用一定要小心!

回車符使用一定要小心!

另外,字串結尾的 \0 別忘了,二級和寫專案這個都很重要!

有乙個bug是在首頁的選擇頁面,我剛開始是用乙個int型的變數來儲存使用者輸入的選擇項,用switch來控制選擇的。但是使用者如果不輸入乙個整數,輸入乙個文字、符號、或者是其他非數字,程式將出現不可預知的錯誤!所以我還是和以前一樣,使用乙個字串(字元陣列)儲存使用者的選擇,如果長度大於1,那麼提示錯誤,並按任意鍵返回首頁,如果長度為1,將判斷交給switch語句,裡面的default語句可以幫助我提示使用者錯誤資訊,不至於讓程式脫離掌控。

基本的**如下:

#include

#include

#include

#include

/*函式宣告*/

void shouye();

void addmessage();

void chazhao();

void shanchu();

void duqu();

int panduan();

int denglu();

//定義乙個學生的資料型別

struct student

;//主函式

int main(void)

//首頁函式

void shouye(void)

;while(1)

switch(i[0])}}

//新增資訊函式

void addmessage()

printf("請輸入學生的姓名,學號,用空格隔開,姓名為0時終止輸入:");

scanf("%s%s",p1->name,p1->num);

while(strcmp(p1->name,"0") != 0 )

printf("請輸入學生的姓名,學號,用空格隔開,姓名為0時終止輸入:");

scanf("%s%s",p1->name,p1->num);

}free(p1);

p1 = null;

p2->next = null;

system("pause");

return ;

}//查詢函式

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",temp,name)!=eof)

}printf("查無此人\n");

system("pause");

fclose(fp);

return ;

}//刪除操作時登陸函式

int denglu(void)

;int i;

printf("請輸入管理員賬號:");

scanf("%s",zhanghao1);

if(strcmp(zhanghao,zhanghao1) == 0)

}else

printf("成功登陸!\n");

system("pause");

return 1;

}//刪除函式

void shanchu(void)

,name[20] = ,num[20],xin[500][50] = ;

file *fp = fopen("e:\\student.txt","r");    

if(!denglu())

return ;

duqu();

printf("\n請輸入您想要刪除的同學學號:");

scanf("%s",num);

while(fscanf(fp,"%s%s",temp,name)!=eof)

else

xin[k][i++] = ' ';

while(name[j] != '\0')

xin[k][i] = '\n';

xin[k][i+1] = '\0';

k++;}}

if(flag == 0)

else

printf("刪除完成!\n");

fclose(fp);

system("pause");

sleep(1000);

}duqu();

system("pause");

fclose(fp);

return ;

}//列印資訊函式

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)

printf("姓名:%s 學號:%s\n",name,num);

fclose(fp);

printf("\n");

system("pause");

}//判斷函式,判斷寫入的學號是否已經存在

int panduan(struct student *p2)

,temp1[20] = ;

file *fp = fopen("e:\\student.txt","r");

while(fgets(temp,100,fp) != null)

temp1[j] = '\0';

if(strcmp(p2->num,temp1) == 0)

i = j = 0;

}fclose(fp);

fp = fopen("e:\\student.txt","a+");

fprintf(fp,"%s %s\n",p2->num,p2->name);

fclose(fp);

return 1;

}

python寫乙個學生資訊管理系統

coding utf 8 2 info 全域性變數 3 def info print 4 print 請選擇功能 5 print 1 新增學員 6 print 2 刪除學員 7 print 3 修改學員 8 print 4 查詢學員 9 print 5 顯示學員 10 print 6 退出系統 11...

C語言實現乙個簡單學生資訊管理系統

學生資訊管理,宣告乙個結構體儲存資訊先。儲存學生資訊的結構體 typedef struct student student 然後呢,增,刪,查,改,顯示,分別封裝為五個函式。其中新增和刪除的部分,為了使資料長度隨函式內增加和刪除的操作改變,傳參時除了陣列指標,陣列的長度也使用指標型傳遞。增 新增學生...

學生資訊管理系統

學生資訊管理系統,顧名思義就是為了管理學生的相關資訊做的一款軟體。雖然這次有原始碼供我們參考,但是從中我學習到了如何從開始到完工去做一款軟體,下邊我從做一項軟體專案的前後順序來總結我的學生資訊管理系統。一,分析需求 首先在做這款軟體是,我們先想象乙個成品,他的功能有哪些,每個功能完成哪項任務,這就是...