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