C語言實現(xiàn)學生學籍管理系統(tǒng)課程設計
本文實例為大家分享了C語言實現(xiàn)學生學籍管理系統(tǒng)的具體代碼,供大家參考,具體內容如下
設計要求
設計學籍管理系統(tǒng)
1、添加學生信息
2、瀏覽學生信息
3、查詢學生信息
4、修改學生信息
5、冊J除學生信息
6、排序學生信息
7、讀取文件學生
8、保存到文件
完整代碼
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<math.h> #include<stdlib.h> #include<windows.h> #define M 80//對結構體變量(學生數(shù)目)進行宏定義 const char* path = "D://C 語言課程設計//信息存儲文件.txt"; FILE* fp;//定義指向文件的指針 struct student { ?char name[20]; //姓名 ?char sex[10]; //性別 ?int age; //年齡 ?char num[20]; //學號 ?char major[30];//專業(yè) ?char classes[30];//班級 ?int math;//數(shù)學成績 ?int english;//英語成績 };//定義結構體變量 int jiami(); void input(struct student stu[M]); void output(struct student stu[M]); void lookfor(struct student stu[M]); void order(struct student stu[M]); void delete_s(struct student stu[M]); void modify(struct student stu[M]); void xuehao(struct student stu[M]); void xingming(struct student stu[M]); void fileread(struct student stu[M]); void filewrite(struct student stu[M]); int count;//判斷學生的數(shù)目 struct student t; int jiami() { ?int s = 123, m;//s 為密碼,m 為輸入的密碼 ?int i = 0;//用來判斷輸入的密碼是否正確 ?printf("請輸入密碼(僅有三次機會):"); ?scanf("%d", &m);//第一次輸入密碼 ?if (m != s) ?{ ?printf("密碼錯誤,還有兩次機會:"); ?scanf("%d", &m);//第二次輸入密碼 ?if (m != s) ?{ ?printf("密碼錯誤,最后一次機會:"); ?scanf("%d", &m);//第三次輸入密碼 ?if (m != s) ?{ ?printf("密碼錯誤\n"); ?} ?else i = 1; ?} ?else i = 1; ?}? ?else i = 1; ?return i; } int main() { ?int choice, sum, i;//choice 用來判斷輸入的命令;sum 用來記錄輸入錯誤的次數(shù);i 用來判斷輸入的密碼是否正確 ?struct student stu[M]; ?sum = 0;//初始化 sum? ?i = jiami(); ?if (i == 1)//判斷輸入的密碼是否正確 ?do ?{ ?printf("\t-------------------------------------------------\n"); ?printf("\t\t+ 學生學籍管理系統(tǒng) +\n"); ?printf("\t-------------------------------------------------\n"); ?printf("\t\t ***************\n"); ?printf("\t\t 1、添加學生信息\n"); ?printf("\t\t 2、瀏覽學生信息\n"); ?printf("\t\t 3、查詢學生信息\n"); ?printf("\t\t 4、修改學生信息\n"); ?printf("\t\t 5、刪除學生信息\n"); ?printf("\t\t 6、排序學生信息\n"); ?printf("\t\t 7、讀取文件學生\n"); ?printf("\t\t 8、保存到文件\n"); ?printf("\t\t 9、退出系統(tǒng)\n"); ?printf("\t\t ***************\n"); ?printf("請輸入你的選擇\n"); //輸出菜單 ?scanf("%d", &choice); //輸入選擇 ?fflush(stdin); //清空緩沖區(qū)? ?if (choice > 9 || choice <= 0) ?{ ?sum++; ?if (sum >= 5) ?{ ?printf("輸入錯誤次數(shù)過多,程序將重新開始\n"); -7- ?system("pause"); ?system("cls"); //清屏 ?} ?} ?switch (choice) ?{ ?case 1: ?input(stu); ?break; //添加學生信息? ?case 2: ?output(stu); ?break;//瀏覽學生信息 ?case 3: ?lookfor(stu); ?break; //尋找學生信息 ?case 4: ?modify(stu); ?break; //修改學生信息 ?case 5: ?delete_s(stu); ?break; //刪除學生信息 ?case 6: ?order(stu); ?break; //排序學生信息 ?case 7: ?fileread(stu); ?break; //從文件中讀取學生信息 ?case 8: ?filewrite(stu); ?break; //將學生信息寫入文件 ?case 9: ?printf("感謝你使用學生學籍管理系統(tǒng),請關掉程序!\n"); ?system("pause"); ?break; ?default: ?printf("無效的選擇!請重新輸入!\n"); ?break; ?} ?} while (choice != 9); ?printf("密碼輸入錯誤,程序結束\n"); ?return 0; } void input(struct student stu[M])//自定義輸入函數(shù) { ?system("cls");//清屏 ?printf("請?zhí)砑右斎雽W生的信息\n"); ?printf("請輸入學生的姓名\n"); ?scanf("%s", &stu[count].name );//輸入學生姓名 ?printf("請輸入學生的性別\n"); ?scanf("%s", &stu[count].sex);//輸入學生性別 ?printf("請輸入學生的年齡\n"); ?scanf("%d", &stu[count].age);//輸入學生年齡 ?printf("請輸入學生的學號\n"); ?scanf("%s", &stu[count].num);//輸入學生學號 ?printf("請輸入學生的專業(yè)\n"); ?scanf("%s", &stu[count].major);//輸入學生專業(yè) ?printf("請輸入學生的班級\n"); ?scanf("%s", &stu[count].classes); //輸入學生班級 ?printf("請輸入學生的數(shù)學成績\n"); ?scanf("%d", &stu[count].math); //輸入學生數(shù)學成績 ?printf("請輸入學生的英語成績\n"); ?scanf("%d", &stu[count].english);//輸入學生英語成績 ?count++;//計算學生人數(shù) } void output(struct student stu[M])//自定義輸出函數(shù) { ?int j; ?system("cls");//清屏 ?if (count == 0)//判斷目前是否有學生信息 ?{ ?printf("當前已存入學生的信息為 0 個\n"); ?return; ?} ?else ?{ ?for (j = 0; j < count; j++) ?{ ?printf("姓名:%s, ", stu[j].name);//輸出姓名 ?printf("性別:%s, ", stu[j].sex);//輸出性別 ?printf("年齡:%d, ", stu[j].age);//輸出年齡 ?printf("學號:%s, ", stu[j].num);//輸出學號 ?printf("專業(yè):%s, ", stu[j].major);//輸出專業(yè) ?printf("班級:%s, ", stu[j].classes);//輸出班級 ?printf("數(shù)學成績:%d, ", stu[j].math);//輸出數(shù)學成績 ?printf("英語成績:%d\n", stu[j].english);//輸出英語成績 ?} ?} } void lookfor(struct student stu[M])//自定義查詢函數(shù) { ?int choice;//定義選擇 ?system("cls");//清屏 ?if (count == 0)//判斷目前是否有學生信息 ?{ ?printf("當前已存學生的信息為 0 個,無法查詢!!!\n"); ?return; ?} ?else ?{ ?printf("請選擇你所要查詢的方式: 1、學號 2、姓名 3、取消\n"); ?scanf("%d", &choice);//輸入選項 ?switch (choice) ?{ ?case 3:return; break; ?case 2:xingming(stu); break;//按姓名查詢 ?case 1:xuehao(stu); break; //按學號查詢 ?default:printf("無效的選擇!請重新輸入!\n"); break; ?} ?} }? void xuehao(struct student stu[M])//自定義學號查詢函數(shù) { ?int j, flag = 0; ?int k = 0;//判斷是否找到該學生信息 ?char xh[25]; ?system("cls"); ?printf("請輸入你想要查詢的學生的學號"); ?scanf("%s", xh);//輸入學號 ?fflush(stdin);//清空緩沖區(qū) ?for (j = 0; j < count; j++) ?{ ?if (strcmp(stu[j].num, xh) == 0)//找到該學號的學生信息 ?{ ?printf("姓名:%s\t\t", stu[j].name);//輸出姓名 ?printf("性別:%s\t\t", stu[j].sex);//輸出性別 ?printf("年齡:%d\t\t", stu[j].age);//輸出年齡 ?printf("學號:%s\t\t", stu[j].num);//輸出學號 ?printf("專業(yè):%s\t\t", stu[j].major);//輸出專業(yè) ?printf("班級:%s\t\t", stu[j].classes);//輸出班級 ?printf("數(shù)學成績:%d\t\t", stu[j].math);//輸出數(shù)學成績 ?printf("英語成績:%d\t\t", stu[j].english);//輸出英語成績 //出該學生的信息 ?k = 1; ?} ?} ?if (k == 0)//沒有找到該學號 ?{ ?printf("很抱歉,沒有你所需要的學生信息\n"); ?} } void xingming(struct student stu[M])//自定義姓名查詢函數(shù) { ?int n = 0; ?int j, flag = 0; ?char xm[25]; ?system("cls"); ?printf("請輸入你想要查詢的學生的姓名"); -11- ?scanf("%s", xm); ?fflush(stdin); ?for (j = 0; j < count; j++) ?{ ?if (strcmp(stu[j].name, xm) == 0) ?{ ?printf("姓名:%s\t\t", stu[j].name);//輸出姓名 ?printf("性別:%s\t\t", stu[j].sex);//輸出性別 ?printf("年齡:%d\t\t", stu[j].age);//輸出年齡 ?printf("學號:%s\t\t", stu[j].num);//輸出學號 ?printf("專業(yè):%s\t\t", stu[j].major);//輸出專業(yè) ?printf("班級:%s\t\t", stu[j].classes);//輸出班級 ?printf("數(shù)學成績:%d\t\t", stu[j].math);//輸出數(shù)學成績 ?printf("英語成績:%d\t\t", stu[j].english);//輸出英語成績 //輸出該學生的信息 ?n = 1; ?} ?} ?if (n == 0) ?{ ?printf("很抱歉,沒有你所需要的學生信息\n"); ?} } void order(struct student stu[M])//自定義排序函數(shù) { ?int j, k, choice, max; ?system("cls"); ?printf("請輸入你想要進行排序的方式\n"); ?printf("1、數(shù)學 2、英語\n"); ?scanf("%d", &choice); //輸入選項 ?switch (choice) ?{ ?case 1: ?for (j = 0; j < count; j++) ?{ ?max = j; ?for (k = j + 1; k < count; k++) ?if (stu[k].math > stu[max].math) ?{ ?t = stu[k]; ?stu[k] = stu[max]; ?stu[max] = t; ?} ?}; ?break; //按數(shù)學成績排序 ?case 2: ?for (j = 0; j < count; j++) ?{ ?max = j; ?for (k = j + 1; k < count; k++) ?if (stu[k].english > stu[max].english) ?{ ?t = stu[k]; ?stu[k] = stu[max]; ?stu[max] = t; ?} ?}; ?break; //按英語成績排序 ?default: ?printf("無效的選擇!請重新輸入!\n"); ?break; ?} ?if (choice >= 1 && choice <= 5) ?printf("排序成功!??!"); } void delete_s(struct student stu[M])//自定義刪除函數(shù)(按學號刪除)? { ?int j, index = 0, k = count; ?char xh[25]; ?system("cls"); ?if (count == 0)//判斷學生數(shù)量是否為 0? ?{ ?printf("當前已存學生信息為 0 個,無法刪除!!!\n"); ?return; ?} ?else ?{ ?printf("請輸入你想要刪除的同學學號\n"); ?scanf("%s", xh);//輸入刪除學生的學號 ?fflush(stdin); //清空緩沖區(qū) ?for (j = 0; j < count; j++) ?{ ?if (strcmp(stu[j].num, xh) == 0) //尋找該學生 ?{ ?for (j = index; j < count; j++) ?stu[j] = stu[j + 1]; ?count--; ?if (count < k) //判斷是否刪除成功 ?printf("你已經刪除成功\n"); ?} ?index++; ?} ?if (j == count) //判斷是否有該學生的信息 ?printf("抱歉!!!沒有你所需要刪除的學生信息!*_*!\n"); ?} } void modify(struct student stu[M])//自定義修改函數(shù) { ?int j, flag = 0, course; ?int i = 0; ?char xh[25]; ?system("cls"); ?if (count == 0) //判斷是否有學生信息 ?{ ?printf("當前已存學生信息為 0 個,無法修改!!!\n"); ?return; ?} ?else ?{ ?printf("請輸入你想要修改的同學學號\n"); -14- ?scanf("%s", &xh); //輸入要修改學生的學號 ?fflush(stdin); ?for (j = 0; j < count; j++) ?{ ?if (strcmp(stu[j].num, xh) == 0) ?{ ?i = 1; printf("你確定要修改學生的信息嗎?如果不確定的話,請關掉本程序吧!\n"); ?printf("選擇課程: 1、數(shù)學 2、英語 3、跳過\n"); ?scanf("%d", &course); //選擇要修改的一部分學生信息 ?switch (course) ?{ ?case 1:printf("請輸入你想要修改后的學生成績\n");? scanf("%d", &stu[j].math); break; //修改數(shù)學成績 ?case 2:printf("請輸入你想要修改后的學生成績\n");? scanf("%d", &stu[j].english); break;//修改英語成績 ?case 3:break; ?default:printf("無效的選擇!請重新輸入!\n"); break; ?} ?printf("選擇信息: 1、學號 2、性別 3、年齡 4、專業(yè) 5、班級 6、跳過\n"); ?scanf("%d", &course); //選擇要修改的一部分學生信息? ?switch (course) ?{ ?case 1:scanf("%s", stu[j].num); break;//修改學號 ?case 2:printf("請輸入修改后的信息:"); scanf("%s",? stu[j].name); break;//修改性別 ?case 3:printf("請輸入修改后的信息:"); scanf("%d",? &stu[j].age); break;//修改年齡 ?case 4:printf("請輸入修改后的信息:"); scanf("%s",? stu[j].major); break;//修改專業(yè) ?case 5:printf("請輸入修改后的信息:"); scanf("%s",? &stu[j].classes); break;//修改班級 ?case 6:break; ?default:printf("無效的選擇!請重新輸入!\n"); break; ?} ?}? ?} ?} ?if (i == 0) printf("無該學生信息?。n"); ?return; } void filewrite(struct student stu[M])//自定義寫入文件函數(shù) { ?char f; ?int j = 0; ?system("cls"); ?printf("請選擇是否要存入已輸入的學生信息:'y'還是'n'???\n"); ?scanf("%c", &f); //判斷是否寫入文件 ?fflush(stdin); //清空緩沖區(qū) ?while (f != 'y' && f != 'n') ?{ ?if (f != 'y' && f != 'n') ?printf("輸入錯誤,請重新輸入\n"); ?printf("以下操作將會覆蓋已存儲的數(shù)據(jù),確定請輸入'y'或'n'?\n"); ?scanf("%c", &f); ?fflush(stdin); ?} ?if (f == 'y') ?{ ?if ((fp = fopen(path, "wb")) == NULL) ?{ ?printf("無法打開文件\n"); ?exit(0); ?} ?for (j = 0; j < count; j++) ?{ ?fwrite(&stu[j], sizeof(struct student), 1, fp); //將學生信息寫入文件 ?} ?fclose(fp); ?if (count == 0)//判斷學生數(shù)目是否為 0? ?printf("沒有文件,無法保存\n"); ?else ?printf("數(shù)據(jù)存儲完畢\n"); ?system("pause"); ?} ?else ?return; } void fileread(struct student stu[M])//自定義讀取文件信息函數(shù) { ?char f; ?int j = 0; ?system("cls");//????????? ?printf("請選擇是否要讀取已輸入的學生信息:'y'還是'n'?\n"); ?scanf("%c", &f); //判斷是否從文件中讀取學生信息 ?fflush(stdin); //清空緩沖區(qū) ?if (f == 'y') ?{ ?if ((fp = fopen(path, "rb")) == NULL) ?{ ?printf("cannot open this file\n"); ?exit(0); ?} ?fread(&stu[j], sizeof(struct student), 1, fp); //從文件中讀取學生信息 ?count = 0; ?count++; ?j++; ?while (fread(&stu[j], sizeof(struct student), 1, fp)) ?{ ?j++; ?count++; ?} ?fclose(fp); ?printf("數(shù)據(jù)讀取完畢!\n"); ?system("pause"); ?}? ?else ?return; }
運行結果
本次登錄設置的密碼是123,當然你也可以自己修改密碼
后面的需要執(zhí)行哪項功能,就輸入對應數(shù)字就可以!
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
淺析內存對齊與ANSI C中struct型數(shù)據(jù)的內存布局
當在C中定義了一個結構類型時,它的大小是否等于各字段(field)大小之和?編譯器將如何在內存中放置這些字段?ANSI C對結構體的內存布局有什么要求?而我們的程序又能否依賴這種布局2013-09-09Qt使用SQLite數(shù)據(jù)庫存儲管理圖片文件
這篇文章主要為大家詳細介紹了Qt如何使用SQLite數(shù)據(jù)庫實現(xiàn)存儲管理圖片文件的功能,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2023-04-04C語言實現(xiàn)數(shù)組移位、前移、后移與整體移動實例代碼
C語言中通??梢允褂醚h(huán)語句實現(xiàn)數(shù)組的移動,下面這篇文章主要給大家介紹了關于C語言實現(xiàn)數(shù)組移位、前移、后移與整體移動的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-03-03詳解C語言中strcpy()函數(shù)與strncpy()函數(shù)的使用
這篇文章主要介紹了詳解C語言中strcpy()函數(shù)與strncpy()函數(shù)的使用,是C語言入門學習中的基礎知識,需要的朋友可以參考下2015-08-08