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、冊(cè)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//對(duì)結(jié)構(gòu)體變量(學(xué)生數(shù)目)進(jìn)行宏定義
const char* path = "D://C 語言課程設(shè)計(jì)//信息存儲(chǔ)文件.txt";
FILE* fp;//定義指向文件的指針
struct student
{
?char name[20]; //姓名
?char sex[10]; //性別
?int age; //年齡
?char num[20]; //學(xué)號(hào)
?char major[30];//專業(yè)
?char classes[30];//班級(jí)
?int math;//數(shù)學(xué)成績(jī)
?int english;//英語成績(jī)
};//定義結(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("請(qǐng)輸入密碼(僅有三次機(jī)會(huì)):");
?scanf("%d", &m);//第一次輸入密碼
?if (m != s)
?{
?printf("密碼錯(cuò)誤,還有兩次機(jī)會(huì):");
?scanf("%d", &m);//第二次輸入密碼
?if (m != s)
?{
?printf("密碼錯(cuò)誤,最后一次機(jī)會(huì):");
?scanf("%d", &m);//第三次輸入密碼
?if (m != s)
?{
?printf("密碼錯(cuò)誤\n");
?}
?else i = 1;
?}
?else i = 1;
?}?
?else i = 1;
?return i;
}
int main()
{
?int choice, sum, i;//choice 用來判斷輸入的命令;sum 用來記錄輸入錯(cuò)誤的次數(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("請(qǐng)輸入你的選擇\n"); //輸出菜單
?scanf("%d", &choice); //輸入選擇
?fflush(stdin); //清空緩沖區(qū)?
?if (choice > 9 || choice <= 0)
?{
?sum++;
?if (sum >= 5)
?{
?printf("輸入錯(cuò)誤次數(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),請(qǐng)關(guān)掉程序!\n");
?system("pause");
?break;
?default:
?printf("無效的選擇!請(qǐng)重新輸入!\n");
?break;
?}
?} while (choice != 9);
?printf("密碼輸入錯(cuò)誤,程序結(jié)束\n");
?return 0;
}
void input(struct student stu[M])//自定義輸入函數(shù)
{
?system("cls");//清屏
?printf("請(qǐng)?zhí)砑右斎雽W(xué)生的信息\n");
?printf("請(qǐng)輸入學(xué)生的姓名\n");
?scanf("%s", &stu[count].name );//輸入學(xué)生姓名
?printf("請(qǐng)輸入學(xué)生的性別\n");
?scanf("%s", &stu[count].sex);//輸入學(xué)生性別
?printf("請(qǐng)輸入學(xué)生的年齡\n");
?scanf("%d", &stu[count].age);//輸入學(xué)生年齡
?printf("請(qǐng)輸入學(xué)生的學(xué)號(hào)\n");
?scanf("%s", &stu[count].num);//輸入學(xué)生學(xué)號(hào)
?printf("請(qǐng)輸入學(xué)生的專業(yè)\n");
?scanf("%s", &stu[count].major);//輸入學(xué)生專業(yè)
?printf("請(qǐng)輸入學(xué)生的班級(jí)\n");
?scanf("%s", &stu[count].classes); //輸入學(xué)生班級(jí)
?printf("請(qǐng)輸入學(xué)生的數(shù)學(xué)成績(jī)\n");
?scanf("%d", &stu[count].math); //輸入學(xué)生數(shù)學(xué)成績(jī)
?printf("請(qǐng)輸入學(xué)生的英語成績(jī)\n");
?scanf("%d", &stu[count].english);//輸入學(xué)生英語成績(jī)
?count++;//計(jì)算學(xué)生人數(shù)
}
void output(struct student stu[M])//自定義輸出函數(shù)
{
?int j;
?system("cls");//清屏
?if (count == 0)//判斷目前是否有學(xué)生信息
?{
?printf("當(dāng)前已存入學(xué)生的信息為 0 個(gè)\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é)號(hào):%s, ", stu[j].num);//輸出學(xué)號(hào)
?printf("專業(yè):%s, ", stu[j].major);//輸出專業(yè)
?printf("班級(jí):%s, ", stu[j].classes);//輸出班級(jí)
?printf("數(shù)學(xué)成績(jī):%d, ", stu[j].math);//輸出數(shù)學(xué)成績(jī)
?printf("英語成績(jī):%d\n", stu[j].english);//輸出英語成績(jī)
?}
?} }
void lookfor(struct student stu[M])//自定義查詢函數(shù)
{
?int choice;//定義選擇
?system("cls");//清屏
?if (count == 0)//判斷目前是否有學(xué)生信息
?{
?printf("當(dāng)前已存學(xué)生的信息為 0 個(gè),無法查詢!!!\n");
?return;
?}
?else
?{
?printf("請(qǐng)選擇你所要查詢的方式: 1、學(xué)號(hào) 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é)號(hào)查詢
?default:printf("無效的選擇!請(qǐng)重新輸入!\n"); break;
?}
?} }?
void xuehao(struct student stu[M])//自定義學(xué)號(hào)查詢函數(shù)
{
?int j, flag = 0;
?int k = 0;//判斷是否找到該學(xué)生信息
?char xh[25];
?system("cls");
?printf("請(qǐng)輸入你想要查詢的學(xué)生的學(xué)號(hào)");
?scanf("%s", xh);//輸入學(xué)號(hào)
?fflush(stdin);//清空緩沖區(qū)
?for (j = 0; j < count; j++)
?{
?if (strcmp(stu[j].num, xh) == 0)//找到該學(xué)號(hào)的學(xué)生信息
?{
?printf("姓名:%s\t\t", stu[j].name);//輸出姓名
?printf("性別:%s\t\t", stu[j].sex);//輸出性別
?printf("年齡:%d\t\t", stu[j].age);//輸出年齡
?printf("學(xué)號(hào):%s\t\t", stu[j].num);//輸出學(xué)號(hào)
?printf("專業(yè):%s\t\t", stu[j].major);//輸出專業(yè)
?printf("班級(jí):%s\t\t", stu[j].classes);//輸出班級(jí)
?printf("數(shù)學(xué)成績(jī):%d\t\t", stu[j].math);//輸出數(shù)學(xué)成績(jī)
?printf("英語成績(jī):%d\t\t", stu[j].english);//輸出英語成績(jī) //出該學(xué)生的信息
?k = 1;
?}
?}
?if (k == 0)//沒有找到該學(xué)號(hào)
?{
?printf("很抱歉,沒有你所需要的學(xué)生信息\n");
?} }
void xingming(struct student stu[M])//自定義姓名查詢函數(shù)
{
?int n = 0;
?int j, flag = 0;
?char xm[25];
?system("cls");
?printf("請(qǐng)輸入你想要查詢的學(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é)號(hào):%s\t\t", stu[j].num);//輸出學(xué)號(hào)
?printf("專業(yè):%s\t\t", stu[j].major);//輸出專業(yè)
?printf("班級(jí):%s\t\t", stu[j].classes);//輸出班級(jí)
?printf("數(shù)學(xué)成績(jī):%d\t\t", stu[j].math);//輸出數(shù)學(xué)成績(jī)
?printf("英語成績(jī):%d\t\t", stu[j].english);//輸出英語成績(jī) //輸出該學(xué)生的信息
?n = 1;
?}
?}
?if (n == 0)
?{
?printf("很抱歉,沒有你所需要的學(xué)生信息\n");
?} }
void order(struct student stu[M])//自定義排序函數(shù)
{
?int j, k, choice, max;
?system("cls");
?printf("請(qǐng)輸入你想要進(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é)成績(jī)排序
?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; //按英語成績(jī)排序
?default:
?printf("無效的選擇!請(qǐng)重新輸入!\n");
?break;
?}
?if (choice >= 1 && choice <= 5)
?printf("排序成功!??!");
}
void delete_s(struct student stu[M])//自定義刪除函數(shù)(按學(xué)號(hào)刪除)?
{
?int j, index = 0, k = count;
?char xh[25];
?system("cls");
?if (count == 0)//判斷學(xué)生數(shù)量是否為 0?
?{
?printf("當(dāng)前已存學(xué)生信息為 0 個(gè),無法刪除!!!\n");
?return;
?}
?else
?{
?printf("請(qǐng)輸入你想要?jiǎng)h除的同學(xué)學(xué)號(hào)\n");
?scanf("%s", xh);//輸入刪除學(xué)生的學(xué)號(hào)
?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("抱歉!!!沒有你所需要?jiǎng)h除的學(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 個(gè),無法修改!!!\n");
?return;
?}
?else
?{
?printf("請(qǐng)輸入你想要修改的同學(xué)學(xué)號(hào)\n");
-14-
?scanf("%s", &xh); //輸入要修改學(xué)生的學(xué)號(hào)
?fflush(stdin);
?for (j = 0; j < count; j++)
?{
?if (strcmp(stu[j].num, xh) == 0)
?{
?i = 1;
printf("你確定要修改學(xué)生的信息嗎?如果不確定的話,請(qǐng)關(guān)掉本程序吧!\n");
?printf("選擇課程: 1、數(shù)學(xué) 2、英語 3、跳過\n");
?scanf("%d", &course); //選擇要修改的一部分學(xué)生信息
?switch (course)
?{
?case 1:printf("請(qǐng)輸入你想要修改后的學(xué)生成績(jī)\n");?
scanf("%d", &stu[j].math); break; //修改數(shù)學(xué)成績(jī)
?case 2:printf("請(qǐng)輸入你想要修改后的學(xué)生成績(jī)\n");?
scanf("%d", &stu[j].english); break;//修改英語成績(jī)
?case 3:break;
?default:printf("無效的選擇!請(qǐng)重新輸入!\n"); break;
?}
?printf("選擇信息: 1、學(xué)號(hào) 2、性別 3、年齡 4、專業(yè) 5、班級(jí) 6、跳過\n");
?scanf("%d", &course); //選擇要修改的一部分學(xué)生信息?
?switch (course)
?{
?case 1:scanf("%s", stu[j].num); break;//修改學(xué)號(hào)
?case 2:printf("請(qǐng)輸入修改后的信息:"); scanf("%s",?
stu[j].name); break;//修改性別
?case 3:printf("請(qǐng)輸入修改后的信息:"); scanf("%d",?
&stu[j].age); break;//修改年齡
?case 4:printf("請(qǐng)輸入修改后的信息:"); scanf("%s",?
stu[j].major); break;//修改專業(yè)
?case 5:printf("請(qǐng)輸入修改后的信息:"); scanf("%s",?
&stu[j].classes); break;//修改班級(jí)
?case 6:break;
?default:printf("無效的選擇!請(qǐng)重新輸入!\n"); break;
?}
?}?
?}
?}
?if (i == 0) printf("無該學(xué)生信息?。n");
?return;
}
void filewrite(struct student stu[M])//自定義寫入文件函數(shù)
{
?char f;
?int j = 0;
?system("cls");
?printf("請(qǐng)選擇是否要存入已輸入的學(xué)生信息:'y'還是'n'???\n");
?scanf("%c", &f); //判斷是否寫入文件
?fflush(stdin); //清空緩沖區(qū)
?while (f != 'y' && f != 'n')
?{
?if (f != 'y' && f != 'n')
?printf("輸入錯(cuò)誤,請(qǐng)重新輸入\n");
?printf("以下操作將會(huì)覆蓋已存儲(chǔ)的數(shù)據(jù),確定請(qǐng)輸入'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ù)存儲(chǔ)完畢\n");
?system("pause");
?}
?else
?return;
}
void fileread(struct student stu[M])//自定義讀取文件信息函數(shù)
{
?char f;
?int j = 0;
?system("cls");//?????????
?printf("請(qǐng)選擇是否要讀取已輸入的學(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)功能,就輸入對(duì)應(yīng)數(shù)字就可以!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(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)簡(jiǎn)單學(xué)生學(xué)籍管理系統(tǒng)
- C語言動(dòng)態(tài)鏈表實(shí)現(xiàn)學(xué)生學(xué)籍管理系統(tǒng)
相關(guān)文章
VSCode配置C/C++語言環(huán)境(2023最新版)
這篇文章主要介紹了VSCode配置C/C++語言環(huán)境(2023最新版)的全過程,本文給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-11-11
Qt6遠(yuǎn)程連接MySQL數(shù)據(jù)庫(kù)的簡(jiǎn)單易上手版
在Qt應(yīng)用程序里,可實(shí)現(xiàn)遠(yuǎn)程MySQL服務(wù)器的連接操作,本文就來介紹一下Qt6遠(yuǎn)程連接MySQL數(shù)據(jù)庫(kù),具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11
C語言 結(jié)構(gòu)體數(shù)組詳解及示例代碼
本文主要介紹C語言 結(jié)構(gòu)體數(shù)組,這里整理了相關(guān)資料及簡(jiǎn)單示例代碼,以便大家學(xué)習(xí)參考,有興趣的小伙伴可以看下2016-08-08
C++實(shí)操之內(nèi)聯(lián)成員函數(shù)介紹
大家好,本篇文章主要講的是C++實(shí)操之內(nèi)聯(lián)成員函數(shù)介紹,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12
C++實(shí)現(xiàn)簡(jiǎn)單的學(xué)生管理系統(tǒng)
本文給大家分享的是使用C++實(shí)現(xiàn)的簡(jiǎn)單的學(xué)生管理系統(tǒng)的代碼,主要是通過鏈表來實(shí)現(xiàn),非常簡(jiǎn)潔,有需要的小伙伴可以參考下。2015-07-07
C語言數(shù)組應(yīng)用實(shí)現(xiàn)掃雷游戲
這篇文章主要為大家詳細(xì)介紹了C語言數(shù)組應(yīng)用實(shí)現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
C語言的動(dòng)態(tài)內(nèi)存管理的深入了解
這篇文章主要為大家詳細(xì)介紹了語言C的動(dòng)態(tài)內(nèi)存管理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-02-02
Easyx實(shí)現(xiàn)窗口自動(dòng)碰撞的小球
這篇文章主要為大家詳細(xì)介紹了Easyx實(shí)現(xiàn)窗口自動(dòng)碰撞的小球,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01

