一、前言
因為最近是在趕進度總結(jié),數(shù)組和指針的筆記已經(jīng)更新,但是數(shù)組、指針的習(xí)題還未總結(jié),數(shù)組的題已經(jīng)開始總結(jié),但是還沒總結(jié)完,所以還沒發(fā)出來,目前學(xué)習(xí)進度已經(jīng)到了學(xué)生管理系統(tǒng),趁熱打鐵將學(xué)生管理系統(tǒng)的數(shù)組篇更新,因為之后還有指針篇,怕到時候代碼搞混了,由于代碼注釋都比較清晰,所以不在一一贅述代碼含義,有疑問可以給老王留言~
二、目的
用C語言數(shù)組寫一個學(xué)生信息管理系統(tǒng),并實現(xiàn)以下功能
1.對學(xué)生信息實現(xiàn)增、刪、改、查;
2.對于增加學(xué)生信息可以判定內(nèi)存是否已滿、是否重復(fù)錄入(學(xué)號唯一性);
3.對于刪除學(xué)生信息判定是否有該生信息;
4.對于修改學(xué)生信息判定是否有該生信息;
5.對于查詢學(xué)生信息判定是否有該生信息、僅打印查詢信息;
6.排序功能——按照學(xué)號排序/按照成績排序
7.以管理員身份打印所有學(xué)生信息;
8.退出系統(tǒng)
三、框架
1.菜單
1.1主菜單
****** -學(xué)生管理系統(tǒng)******
1.添加學(xué)生信息
2.刪除學(xué)生信息
3.修改學(xué)生信息
4.查詢學(xué)生信息
5.學(xué)生信息排序
0.退出管理系統(tǒng)
1.2子菜單
**排序方式
1-按照學(xué)號排序
2-按照成績排序
2.流程圖
2.1總流程圖
由于不太清楚,我把詳細的各部分列出來如下:
2.2開始流程圖
2.3增加學(xué)生信息流程圖
2.4.刪除學(xué)生信息流程圖
2.5修改學(xué)生信息流程圖
2.6查詢學(xué)生信息流程圖
2.7對學(xué)生信息排序流程圖
3.思路
1.構(gòu)建一個學(xué)生結(jié)構(gòu)體,里面包含學(xué)生學(xué)號、姓名、班級、成績;
2.該結(jié)構(gòu)體是一個數(shù)組型,用來存儲學(xué)生呢信息;
3.先寫主菜單和主菜單選項函數(shù)及四個相關(guān)函數(shù)——增刪改查;
4.寫方便驗證的函數(shù)——打印函數(shù);
5.寫排序方式的子菜單和獲取菜單選項的函數(shù);
6.寫排序方式——按照學(xué)號排序函數(shù)/按照成績排序函數(shù)
7.排序函數(shù)用的冒泡排序法(在數(shù)組的筆記那篇文章有講);
四、代碼
#include "stdio.h"
#define STUDENT_NUM 30
//創(chuàng)建一個學(xué)生結(jié)構(gòu)體,包含學(xué)號、姓名、班級、成績
struct Student
{
int no;
char name[64];
int class;
float score;
};
//初始化一個學(xué)生結(jié)構(gòu)體為數(shù)組
struct Student student[STUDENT_NUM] = {0};
void Student_Init(void);
int StudentMenu(void); //主菜單函數(shù)聲明
void Student_ADD();
void Student_Revise();
void Student_Del();
void Student_Find();
void Student_Sort();
int SortMenu();
void SortNo();
void SortScore();
void Student_Printf();
//初始化學(xué)生信息,將開辟STUDENT_NUM這么大的空間,并全部賦-1表示未錄入信息
void Student_Init(void)
{
for (int i = 0;i < STUDENT_NUM;i++)
{
student[i].no = -1; //未錄入信息標(biāo)志
}
}
int main()
{
Student_Init();
int num1;
while (1)
{
num1=StudentMenu();
switch (num1)
{
case 1:Student_ADD();break;
case 2:Student_Del();break;
case 3:Student_Revise();break;
case 4:Student_Find();break;
case 5:Student_Sort();break;
case 111:Student_Printf();break;
case 0:goto over;
}
}
over:
printf("感謝使用學(xué)生管理系統(tǒng)!\n");
}
//主菜單
int StudentMenu(void)
{
int num;
p1:
printf("****** -學(xué)生管理系統(tǒng)******\n");
printf("******1.添加學(xué)生信息******\n");
printf("******2.刪除學(xué)生信息******\n");
printf("******3.修改學(xué)生信息******\n");
printf("******4.查詢學(xué)生信息******\n");
printf("******5.學(xué)生信息排序******\n");
printf("******0.退出管理系統(tǒng)******\n");
printf("請輸入你要執(zhí)行操作的序號:\n");
scanf("%d", &num);
if ((num >= 0 && num <= 5) || (num == 111)) //111打印所有數(shù)據(jù)
{
return num;
}
else
{
printf("您輸入的菜單選項不正確,清重新輸入!\n");
goto p1;
}
}
//學(xué)生信息排序子菜單
int SortMenu()
{
int num1;
p1:
printf("*******排序方式*****\n");
printf("***1-按照學(xué)號排序***\n");
printf("***2-按照成績排序***\n");
printf("請輸入排序方式:\n");
scanf("%d",&num1);
if (num1>=1&&num1<=2)
{
return num1;
}else{
printf("輸入錯誤選項,請重新選擇排序方式!\n");
goto p1;
}
}
//添加學(xué)生信息
void Student_ADD()
{
int i;
//遍歷學(xué)號數(shù)組,找到放數(shù)據(jù)的空間
printf("正在執(zhí)行添加學(xué)生信息操作……\n");
for (i = 0; i < STUDENT_NUM; i++)
{
if (student[i].no==-1)//有空間,跳出循環(huán),輸入數(shù)據(jù)
{
break;
}
}
if (i==STUDENT_NUM)
{
printf("空間已滿,禁止繼續(xù)錄入!\n");
}
//輸入信息,由于有判定學(xué)號唯一,用tem保存從屏幕上獲取的數(shù)據(jù)
struct Student temp;
printf("請輸入學(xué)號:\n");
scanf("%d",&temp.no);
printf("請輸入姓名:\n");
getchar();
scanf("%s",temp.name);
printf("請輸入班級:\n");
getchar();
scanf("%d",&temp.class);
printf("請輸入成績:\n");
scanf("%f",&temp.score);
//因為學(xué)號是唯一的,判斷不能重復(fù)輸入
for (int j = 0; j < STUDENT_NUM; j++)
{
if (student[j].no==temp.no)
{
printf("該學(xué)生已被錄入,請不要重復(fù)錄入!\n");
}
}
student[i]=temp;
}
//修改學(xué)生信息
void Student_Revise()
{
int num_0=0;//設(shè)置查詢標(biāo)志位,沒找到0,找到1
printf("正在執(zhí)行修改學(xué)生信息操作……\n");
p1:
printf("請輸入您要修改的學(xué)號:\n");
int num,i;
scanf("%d",&num);
for (i = 0; i < STUDENT_NUM; i++)
{
if (num!=student[i].no)
{
num_0=0;
continue;
}else if(student[i].no==num)
{
num_0=1;
break;
}
}
if (num_0==0)
{
printf("查無此人,請重新輸入要修改的學(xué)號!\n");
goto p1;
}
//從屏幕獲取新的數(shù)據(jù)
printf("請輸入學(xué)號:\n");
scanf("%d",&student[i].no);
printf("請輸入姓名:\n");
getchar();
scanf("%s",student[i].name);
getchar();
printf("請輸入班級:\n");
scanf("%d",&student[i].class);
printf("請輸入成績:\n");
scanf("%f",&student[i].score);
}
//刪除學(xué)生信息
void Student_Del()
{
int num,i;
int num_0=0;//設(shè)置查詢標(biāo)志位,沒找到0,找到1
printf("正在執(zhí)行刪除學(xué)生信息操作……\n");
p1:
printf("請輸入您要刪除的學(xué)號:\n");
scanf("%d",&num);
for (i = 0; i < STUDENT_NUM; i++)
{
if (num!=student[i].no)//沒找到
{
continue;
num_0=0;
}else if (student[i].no==num)
{
num_0=1;
student[i].no=-1;
printf("刪除成功!\n");
}
}
if (num_0==0)
{
printf("查無此人,請重新輸入要刪除的學(xué)號!\n");
goto p1;
}
}
//查詢學(xué)生信息
void Student_Find()
{
int i,num;
int num_0=0;//設(shè)置查詢標(biāo)志位,沒找到0,找到1
printf("正在執(zhí)行查詢學(xué)生信息操作……\n");
p1:
printf("請輸入您要查詢的學(xué)號:\n");
scanf("%d",&num);
for (i = 0; i < STUDENT_NUM; i++)
{
if (num!=student[i].no)
{
num_0=0;
continue;
}else if (student[i].no==num)
{
num_0=1;
break;
}
}
if (num_0==0)
{
printf("查無此人,請重新輸入要查詢的學(xué)號!\n");
goto p1;
}
printf("學(xué)號\t姓名\t班級\t成績\n");
printf("%d\t",student[i].no);
printf("%s\t",student[i].name);
printf("%d\t",student[i].class);
printf("%.2f\n",student[i].score);
}
//對學(xué)生信息排序
void Student_Sort()
{
int num2;
num2=SortMenu();
int num_0;
//判斷是否有學(xué)生信息,有則打印,
for (int i = 0; i <STUDENT_NUM; i++)
{
if (student[i].no==-1)
{
num_0=0;
continue;
}else{
num_0=1;
break;
}
}
if (num_0==0)
{
printf("沒有學(xué)生信息,無法排序打印!\n");
}
//選擇排序方式
if (num2==1)
{
SortNo();
}else if (num2==2)
{
SortScore();
}
}
//學(xué)生學(xué)號排序
void SortNo()
{
int i,j;
printf("正在按照學(xué)號排序\n");
struct Student temp;
for ( i = 0; i < STUDENT_NUM; i++)
{
for (j = 0; j <STUDENT_NUM-i-1; j++)
{
if (student[j].no>student[j+1].no)
{
temp=student[j];
student[j]=student[j+1];
student[j+1]=temp;
}
}
}
Student_Printf();
}
//學(xué)生成績排序
void SortScore()
{
int i,j;
printf("正在按照成績排序\n");
struct Student temp;
for ( i = 0; i < STUDENT_NUM; i++)
{
for (j = 0; j <STUDENT_NUM-i-1; j++)
{
if (student[j].score<student[j+1].score)
{
temp=student[j];
student[j]=student[j+1];
student[j+1]=temp;
}
}
}
Student_Printf();
}
//打印所有學(xué)生信息
void Student_Printf()
{
printf("學(xué)號\t姓名\t班級\t成績\n");
for (int i = 0; i < STUDENT_NUM; i++)
{
if (student[i].no!=-1)
{
printf("%d\t",student[i].no);
printf("%s\t",student[i].name);
printf("%d\t",student[i].class);
printf("%.2f\n",student[i].score);
}
}
}
五、演示視頻
由于之前我不知道數(shù)字時鐘上傳后友友們下載是要vip的,所以為了方便友友們,我將實現(xiàn)視頻放在文章中如下:文章來源:http://www.zghlxwxcb.cn/news/detail-414415.html
數(shù)組學(xué)生管理系統(tǒng)文章來源地址http://www.zghlxwxcb.cn/news/detail-414415.html
到了這里,關(guān)于C語言——學(xué)生信息管理系統(tǒng)(數(shù)組)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!