您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“C語(yǔ)言如何實(shí)現(xiàn)簡(jiǎn)易學(xué)生管理系統(tǒng)”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“C語(yǔ)言如何實(shí)現(xiàn)簡(jiǎn)易學(xué)生管理系統(tǒng)”吧!
首先我們?cè)谧鲆粋€(gè)管理系統(tǒng)之前要了解這個(gè)學(xué)生管理系統(tǒng)需要哪些功能,如:簡(jiǎn)單的增,刪,改,查,即:錄入成績(jī),查詢成績(jī),刪除成績(jī),修改成績(jī),插入成績(jī),這幾個(gè)是基本要包括的,當(dāng)然我們也可以加上排序,統(tǒng)計(jì)學(xué)生人數(shù),這些功能。
當(dāng)清楚需要哪些功能之后我們就可以寫(xiě)系統(tǒng)的界面了。
效果圖如下:
printf("\t\t\t---------------STUDENT---------------\t\t\t\n"); printf("\t\t\t0.退出\t\t\t\n"); printf("\t\t\t1.錄入成績(jī)\t\t\t\n"); printf("\t\t\t2.查詢成績(jī)\t\t\t\n"); printf("\t\t\t3.刪除成績(jī)\t\t\t\n"); printf("\t\t\t4.修改成績(jī)\t\t\t\n"); printf("\t\t\t5.插入成績(jī)\t\t\t\n"); printf("\t\t\t6.排序\t\t\t\n"); printf("\t\t\t7.統(tǒng)計(jì)學(xué)生人數(shù)\t\t\t\n"); printf("\t\t\t-------------------------------------\t\t\t\n"); printf("\t\t\t選擇(0---7)\t\t\t");
接著我們就可以加入switch函數(shù)進(jìn)行功能選擇
定義整型變量choice
int choice ; scanf("%d",&choice ); switch(choice ) { case 0:exit(0); break; case 1: in();save();system("pause");system("cls");break;//錄入 case 2: show();system("pause");system("cls");break;//查詢 case 3: del();save();system("pause");system("cls");break;//刪除 case 4: modify();system("pause");system("cls");break;//修改 case 5: insert();save();system("pause");system("cls");break;//插入 case 6: order();system("pause");system("cls");break;//排序 case 7: total();system("pause");system("cls");break;//統(tǒng)計(jì) default:printf("\n輸入錯(cuò)誤,請(qǐng)輸入0---7\n\n");system("pause");system("cls");break; }
定義一個(gè)Menu函數(shù)把上面兩個(gè)結(jié)合起來(lái),我們加一個(gè)while循環(huán)讓這個(gè)這個(gè)菜單一直循環(huán)出現(xiàn),而不是用一次就沒(méi)了。
void Menu()//菜單 { while(1) { printf("\t\t\t---------------STUDENT---------------\t\t\t\n"); printf("\t\t\t0.退出\t\t\t\n"); printf("\t\t\t1.錄入成績(jī)\t\t\t\n"); printf("\t\t\t2.查詢成績(jī)\t\t\t\n"); printf("\t\t\t3.刪除成績(jī)\t\t\t\n"); printf("\t\t\t4.修改成績(jī)\t\t\t\n"); printf("\t\t\t5.插入成績(jī)\t\t\t\n"); printf("\t\t\t6.排序\t\t\t\n"); printf("\t\t\t7.統(tǒng)計(jì)學(xué)生人數(shù)\t\t\t\n"); printf("\t\t\t-------------------------------------\t\t\t\n"); printf("\t\t\t選擇(0---7)\t\t\t"); int chioce; scanf("%d",&chioce); switch(chioce) { case 0:exit(0); break; case 1: in();save();system("pause");system("cls");break;//錄入 case 2: show();system("pause");system("cls");break;//查詢 case 3: del();save();system("pause");system("cls");break;//刪除 case 4: modify();system("pause");system("cls");break;//修改 case 5: insert();save();system("pause");system("cls");break;//插入 case 6: order();system("pause");system("cls");break;//排序 case 7: total();system("pause");system("cls");break;//統(tǒng)計(jì) default:printf("\n輸入錯(cuò)誤,請(qǐng)輸入0---7\n\n");system("pause");system("cls");break; } } }
寫(xiě)完菜單之后我們就要對(duì)“學(xué)生”這個(gè)數(shù)據(jù)進(jìn)行分析
在這個(gè)系統(tǒng)中學(xué)生的信息要包含那些東西,舉個(gè)例子:學(xué)號(hào),姓名,選修課成績(jī),實(shí)驗(yàn)課成績(jī),必修課成績(jī),總成績(jī),平均成績(jī)。然后根據(jù)這些寫(xiě)一個(gè)結(jié)構(gòu)體(我寫(xiě)的是數(shù)組類型的結(jié)構(gòu)體)
struct student { char num[20];//學(xué)號(hào) char name[20];//姓名 float elec;//選修課 float expe;//實(shí)驗(yàn)課 float requ;//必修課 float sum;//總成績(jī) ' float ave;//平均成績(jī) }student[N];
接著我們開(kāi)始寫(xiě)實(shí)現(xiàn)這個(gè)系統(tǒng)功能的函數(shù)
第一個(gè)就是成績(jī)的錄入
void in()//錄入信息 { void save() ; int i,n; printf("輸入錄取學(xué)生的數(shù)量\n"); scanf("%d", &n); for (i=1 ; i<=n; i++) { printf("請(qǐng)輸入第%d位學(xué)生學(xué)號(hào):\n",i); scanf("%s",student[i].num); printf("請(qǐng)輸入第%d位學(xué)生姓名:\n", i ); scanf("%s",student[i].name); printf("請(qǐng)輸入第%d位學(xué)生選修課成績(jī):\n", i ); scanf("%f",&student[i].elec); printf("請(qǐng)輸入第%d位學(xué)生實(shí)驗(yàn)成績(jī):\n", i ); scanf("%f", &student[i].expe); printf("請(qǐng)輸入第%d位學(xué)生必修課成績(jī):\n", i ); scanf("%f", &student[i].requ); student[i].sum=student[i].elec+student[i].expe+student[i].requ; student[i].ave=student[i].sum /3; count++; } printf("錄入成功\n"); }
第二個(gè)就是成績(jī)的查詢
void show() //查詢 { int i; char xh[20]; printf("請(qǐng)輸入要查詢的學(xué)生學(xué)號(hào):\n"); getchar(); gets(xh); for (i=0;i<N;i++) { if(strcmp(student[i].num,xh)==0)//對(duì)比兩個(gè)字符串如果兩者一樣則進(jìn)行if下面的的語(yǔ)句否則繼續(xù)循環(huán) printf("\n學(xué)號(hào):%-5s 姓名:%-5s 選修課成績(jī):%-5.1f 實(shí)驗(yàn)課成績(jī):%-5.1f 必修課成績(jī):%-5.1f 總分:%-5.1f 平均分:%-5.1f\n", student[i].num,student[i].name,student[i].elec,student[i].expe,student[i].requ,student[i].sum,student[i].ave); } }
第三個(gè)就是成績(jī)的刪除
void del()//刪除 { void save() ; int j,a=0,k=count; char xh[25]; printf("所要?jiǎng)h除的學(xué)生學(xué)號(hào)為:\n"); scanf("%s",xh); flush(stdin);//緩沖區(qū) for (j=0;j<count;j++) { if (strcmp(student[j].num,xh)==0) { for (j=a;j<count;j++) student[j]=student[j+1]; count--; if (count<k) printf("刪除成功\n"); } a++; } if (j==count-1) printf("沒(méi)有你所要?jiǎng)h除的學(xué)生的信息\n"); }
第四項(xiàng),成績(jī)的修改
步驟 1.先找到要修改的學(xué)生
2.選擇修改的項(xiàng)目
3.更改總成績(jī)和平均分
4.顯示修改后的學(xué)生數(shù)據(jù)
void modify()//修改 { void save() ; int i,j,h; float score; char xh[20]; printf ("01.輸入修改的學(xué)生的學(xué)號(hào):\n") ; scanf("%s",xh); for(i=1;i<N;i++) if (strcmp(student[i].num,xh)==0) j=i; printf("請(qǐng)選擇修改內(nèi)容\n"); printf("1.修改該學(xué)生的選修課成績(jī)\n"); printf("2.修改該學(xué)生的實(shí)驗(yàn)課成績(jī)\n"); printf("3.修改該學(xué)生的必修課成績(jī)\n"); scanf("%d",&h); switch (h) { case 1:printf("請(qǐng)輸入該學(xué)生的選修課成績(jī)\n");scanf("%f",&score);student[j].elec=score; break; case 2:printf("請(qǐng)輸入該學(xué)生的實(shí)驗(yàn)課成績(jī)\n");scanf("%f",&score);student[j].expe=score;break; case 3:printf("請(qǐng)輸入該學(xué)生的必修課成績(jī)\n");scanf("%f",&score);student[j].requ=score;break; default :printf("\n輸入錯(cuò)誤,請(qǐng)輸入1---3\n\n"); break; } student[j].sum = student[j].elec+student[j].expe + student[j].requ; printf("修改后為:\n"); printf("\n學(xué)號(hào):%-5s 姓名:%-5s 選修課成績(jī):%-5.1f 實(shí)驗(yàn)課成績(jī):%-5.1f 必修課成績(jī):%-5.1f 總分:%-5.1f 平均分:%-5.1f\n", student[j].num,student[j].name,student[j].elec,student[j].expe,student[j].requ,student[j].sum,student[j].ave); printf("\n"); printf("修改成功\n") ; }
第五項(xiàng),成績(jī)的插入
void insert ()//插入 {void save(); int m, flag, i = count, j,k; printf("請(qǐng)輸入待添加的學(xué)生人數(shù):\n"); scanf("%d", &m); if (m > 0) { k=count+1; for(i=k;i<=count+m;i++) { flag = 1; while (flag!= 0) { flag = 0; printf("請(qǐng)輸入第%d位學(xué)生的學(xué)號(hào):\n", i); getchar(); gets(student[i].num); for (j = 0; j < i; j++) { if (strcmp(student[i].num, student[j].num) == 0) { printf("該學(xué)號(hào)已存在,請(qǐng)重新輸入!\n"); flag = 1; break; } } } printf("請(qǐng)輸入第%d位學(xué)生姓名:\n", i ); gets(student[i].name); printf("請(qǐng)輸入第%d位學(xué)生選修課成績(jī):\n", i ); scanf("%f",&student[i].elec); printf("請(qǐng)輸入第%d位學(xué)生實(shí)驗(yàn)成績(jī):\n", i ); scanf("%f", &student[i].expe); printf("請(qǐng)輸入第%d位學(xué)生必修課成績(jī):\n", i ); scanf("%f", &student[i].requ); student[i].sum=student[i].elec+student[i].expe+student[i].requ; student[i].ave=student[i].sum /3; } count+= m; printf("添加完成!\n"); system("pause"); } }
第六項(xiàng),排序
void order()//排序 { int i,j,m; for(j=1;j<=count-1;j++) { m=j; for(i=j+1;i<=count;i++) { if(student[i].sum < student[m].sum) { student[0]=student[i]; student[i]=student[m]; student[m]=student[0]; } } } for(j=1;j<=count;j++) { printf("\n學(xué)號(hào):%-5s 姓名:%-5s 選修課成績(jī):%-5.1f 實(shí)驗(yàn)課成績(jī):%-5.1f 必修課成績(jī):%-5.1f 總分:%-5.1f 平均分:%-5.1f\n", student[j].num,student[j].name,student[j].elec,student[j].expe,student[j].requ,student[j].sum,student[j].ave); } }
第七項(xiàng),統(tǒng)計(jì)學(xué)生人數(shù)
void total ()//統(tǒng)計(jì) { printf("學(xué)生人數(shù)%d\n",count); }
完整的代碼
#include<stdio.h> #include<string.h> #include<stdlib.h> #define N 100 struct student { char num[20];//學(xué)號(hào) char name[20];//姓名 float elec;//選修課 float expe;//實(shí)驗(yàn)課 float requ;//必修課 float sum;//總成績(jī) ' float ave;//平均成績(jī) }student[N]; void Menu(); // 菜單 void in();//錄入 void show() ;//查找 void order();//排序 void del(); //刪除 void modify();//修改 void total ();//統(tǒng)計(jì) void insert ();//插入 int count=0;//人數(shù) void save();//保存 int main() { Menu(); return 0; } void Menu()//菜單 { while(1) { printf("\t\t\t---------------STUDENT---------------\t\t\t\n"); printf("\t\t\t0.退出\t\t\t\n"); printf("\t\t\t1.錄入成績(jī)\t\t\t\n"); printf("\t\t\t2.查詢成績(jī)\t\t\t\n"); printf("\t\t\t3.刪除成績(jī)\t\t\t\n"); printf("\t\t\t4.修改成績(jī)\t\t\t\n"); printf("\t\t\t5.插入成績(jī)\t\t\t\n"); printf("\t\t\t6.排序\t\t\t\n"); printf("\t\t\t7.統(tǒng)計(jì)學(xué)生人數(shù)\t\t\t\n"); printf("\t\t\t-------------------------------------\t\t\t\n"); printf("\t\t\t選擇(0---7)\t\t\t"); int chioce; scanf("%d",&chioce); switch(chioce) { case 0:exit(0); break; case 1: in();save();system("pause");system("cls");break;//錄入 case 2: show();system("pause");system("cls");break;//查詢 case 3: del();save();system("pause");system("cls");break;//刪除 case 4: modify();system("pause");system("cls");break;//修改 case 5: insert();save();system("pause");system("cls");break;//插入 case 6: order();system("pause");system("cls");break;//排序 case 7: total();system("pause");system("cls");break;//統(tǒng)計(jì) default:printf("\n輸入錯(cuò)誤,請(qǐng)輸入0---7\n\n");system("pause");system("cls");break; } } } void save() //保存 { FILE* fp; char filename[100]; int i; printf("請(qǐng)輸入要保存的文件名:\n"); scanf("%s", filename); if ((fp = fopen(filename, "w")) == NULL) { printf("打開(kāi)文件失敗!\n"); exit(0); } for (i = 1; i<=count; i++) { if (fwrite(&student[i], sizeof(struct student), 1, fp) != 1) printf("保存失?。n"); } printf("保存成功!\n"); fclose(fp); } void in()//錄入信息 { void save() ; int i,n; printf("輸入錄取學(xué)生的數(shù)量\n"); scanf("%d", &n); for (i=1 ; i<=n; i++) { printf("請(qǐng)輸入第%d位學(xué)生學(xué)號(hào):\n",i); scanf("%s",student[i].num); printf("請(qǐng)輸入第%d位學(xué)生姓名:\n", i ); scanf("%s",student[i].name); printf("請(qǐng)輸入第%d位學(xué)生選修課成績(jī):\n", i ); scanf("%f",&student[i].elec); printf("請(qǐng)輸入第%d位學(xué)生實(shí)驗(yàn)成績(jī):\n", i ); scanf("%f", &student[i].expe); printf("請(qǐng)輸入第%d位學(xué)生必修課成績(jī):\n", i ); scanf("%f", &student[i].requ); student[i].sum=student[i].elec+student[i].expe+student[i].requ; student[i].ave=student[i].sum /3; count++; } printf("錄入成功\n"); } void modify()//修改 { void save() ; int i,j,h; float score; char xh[20]; printf ("01.輸入修改的學(xué)生的學(xué)號(hào):\n") ; scanf("%s",xh); for(i=1;i<N;i++) if (strcmp(student[i].num,xh)==0) j=i; printf("請(qǐng)選擇修改內(nèi)容\n"); printf("1.修改該學(xué)生的選修課成績(jī)\n"); printf("2.修改該學(xué)生的實(shí)驗(yàn)課成績(jī)\n"); printf("3.修改該學(xué)生的必修課成績(jī)\n"); scanf("%d",&h); switch (h) { case 1:printf("請(qǐng)輸入該學(xué)生的選修課成績(jī)\n");scanf("%f",&score);student[j].elec=score; break; case 2:printf("請(qǐng)輸入該學(xué)生的實(shí)驗(yàn)課成績(jī)\n");scanf("%f",&score);student[j].expe=score;break; case 3:printf("請(qǐng)輸入該學(xué)生的必修課成績(jī)\n");scanf("%f",&score);student[j].requ=score;break; default :printf("\n輸入錯(cuò)誤,請(qǐng)輸入1---3\n\n"); break; } student[j].sum = student[j].elec+student[j].expe + student[j].requ; printf("修改后為:\n"); printf("\n學(xué)號(hào):%-5s 姓名:%-5s 選修課成績(jī):%-5.1f 實(shí)驗(yàn)課成績(jī):%-5.1f 必修課成績(jī):%-5.1f 總分:%-5.1f 平均分:%-5.1f\n", student[j].num,student[j].name,student[j].elec,student[j].expe,student[j].requ,student[j].sum,student[j].ave); printf("\n"); printf("修改成功\n") ; } void show() //查詢 { int i; char xh[20]; printf("請(qǐng)輸入要查詢的學(xué)生學(xué)號(hào):\n"); getchar(); gets(xh); for (i=0;i<N;i++) { if(strcmp(student[i].num,xh)==0) printf("\n學(xué)號(hào):%-5s 姓名:%-5s 選修課成績(jī):%-5.1f 實(shí)驗(yàn)課成績(jī):%-5.1f 必修課成績(jī):%-5.1f 總分:%-5.1f 平均分:%-5.1f\n", student[i].num,student[i].name,student[i].elec,student[i].expe,student[i].requ,student[i].sum,student[i].ave); } } void order()//排序 { int i,j,m; for(j=1;j<=count-1;j++) { m=j; for(i=j+1;i<=count;i++) { if(student[i].sum < student[m].sum) { student[0]=student[i]; student[i]=student[m]; student[m]=student[0]; } } } for(j=1;j<=count;j++) { printf("\n學(xué)號(hào):%-5s 姓名:%-5s 選修課成績(jī):%-5.1f 實(shí)驗(yàn)課成績(jī):%-5.1f 必修課成績(jī):%-5.1f 總分:%-5.1f 平均分:%-5.1f\n", student[j].num,student[j].name,student[j].elec,student[j].expe,student[j].requ,student[j].sum,student[j].ave); } } void del()//刪除 { void save() ; int j,a=0,k=count; char xh[25]; printf("所要?jiǎng)h除的學(xué)生學(xué)號(hào)為:\n"); scanf("%s",xh); flush(stdin); for (j=0;j<count;j++) { if (strcmp(student[j].num,xh)==0) { for (j=a;j<count;j++) student[j]=student[j+1]; count--; if (count<k) printf("刪除成功\n"); } a++; } if (j==count-1) printf("沒(méi)有你所要?jiǎng)h除的學(xué)生的信息\n"); } void insert ()//插入 {void save(); int m, flag, i = count, j,k; printf("請(qǐng)輸入待添加的學(xué)生人數(shù):\n"); scanf("%d", &m); if (m > 0) { k=count+1; for(i=k;i<=count+m;i++) { flag = 1; while (flag!= 0) { flag = 0; printf("請(qǐng)輸入第%d位學(xué)生的學(xué)號(hào):\n", i); getchar(); gets(student[i].num); for (j = 0; j < i; j++) { if (strcmp(student[i].num, student[j].num) == 0) { printf("該學(xué)號(hào)已存在,請(qǐng)重新輸入!\n"); flag = 1; break; } } } printf("請(qǐng)輸入第%d位學(xué)生姓名:\n", i ); gets(student[i].name); printf("請(qǐng)輸入第%d位學(xué)生選修課成績(jī):\n", i ); scanf("%f",&student[i].elec); printf("請(qǐng)輸入第%d位學(xué)生實(shí)驗(yàn)成績(jī):\n", i ); scanf("%f", &student[i].expe); printf("請(qǐng)輸入第%d位學(xué)生必修課成績(jī):\n", i ); scanf("%f", &student[i].requ); student[i].sum=student[i].elec+student[i].expe+student[i].requ; student[i].ave=student[i].sum /3; } count+= m; printf("添加完成!\n"); system("pause"); } } void total ()//統(tǒng)計(jì) { printf("學(xué)生人數(shù)%d\n",count); }
到此,相信大家對(duì)“C語(yǔ)言如何實(shí)現(xiàn)簡(jiǎn)易學(xué)生管理系統(tǒng)”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。