(比較簡單,建議非計算機專業參考)
需求
- 1.主菜單界面
菜單選項框尺寸16X8- 2.增加功能
(1)用戶輸入的添加學生數量不能小於0,也不能超過列表剩余容量。
(2)用戶輸入的學號必須是唯一的,否則要提示用戶重新輸入。- 3.查詢功能
按照學生的學號進行查照即可。- 4.修改功能
(1)用戶修改后的學號不能與已存在的學號重復,否則提示用戶重新輸入。
(2)可以與當前修改的條目的學號相同(從結果來看就是沒有對這一條記錄的學號進行修改)。- 5.刪除功能
被刪除了的條目之后的條目要按順序上移以填充空位。- 6.輸出功能
(1)第一行提示數量的信息與上一行之間會有一個空行。
(2)第一行提示數量的信息左右兩邊的*號都是6個。
(3)第一行提示數量的信息格式是<”學號”,10格寬><2空格><”姓名”,16格寬><2空格><”成績”,12格寬>
(4)之后每一行學生信息的格式是<學號值,10格寬><姓名值,20格寬><成績值,10格寬>。- 7.退出功能
“退出”即是程序退出。- 8.讀取數據
當程序運行數把文件從data.txt中讀取出來,放入信息表中。
源代碼
@月亮警察 哈哈
#include<stdio.h>
#include<string.h>
void XiuGai(); /*修改*/
void XianShi(); /*顯示*/
void LuRu(); /*錄入*/
void ShanChu(); /*刪除*/
void GongNeng(); /*功能選擇*/
void read_txt(); /*讀入數據*/
void ChaXun(); /*查詢*/
int number = 0;//計數
/******************學生結構體*****************/
typedef struct student
{
char name[20] ; /*姓名*/
int id; /*學號*/
int score; /*成績*/
} typel;
typel stu[10];
/********************主函數*****************/
int main()
{
while(1)
{
printf("+--------------+\n");
printf("| 1. 增加功能 |\n");
printf("| 2. 查詢功能 |\n");
printf("| 3. 修改功能 |\n");
printf("| 4. 刪除功能 |\n");
printf("| 5. 輸出功能 |\n");
printf("| 0. 退出 |\n");
printf("+--------------+\n");
int a;
printf("請選擇服務,並輸入對應數字:\n");
scanf("%d",&a);
if(a>5 || a< 0)
{
printf("輸入有誤!請重新輸入...\n");//當輸入不在0~5范圍時。
scanf("%d",&a);
}
switch(a)
{
case 1:
printf("【增加功能】\n");
LuRu();
break;
case 2:
printf("【查詢功能】\n");
ChaXun();
break;
case 3:
printf("【修改功能】\n");
XiuGai();
break;
case 4:
printf("【刪除功能】\n");
ShanChu();
break;
case 5:
printf("【輸出功能】\n");
XianShi();
break;
case 0:
printf("謝謝惠顧,O(∩_∩)O拜拜~\n");
return 0;
}
}
return 0;
}
/***************************從文件讀入數據****************************/
void read_txt()
{
/*從文件中讀入數據*/
FILE *file; //定義文件指針
//file = fopen("step1/data.txt","r");//以只讀的方式打開文件
file = fopen("data.txt","r");
int i = 0;
while(1)
{
i++;
fscanf(file,"%d %s %d",&stu[i].id,&stu[i].name,&stu[i].score);
//printf("%d \n",i);
if(i == 5 )
{
fclose(file);
number = 5;
break;
}
}
return;
}
/***************************錄入-【增加功能】****************************/
void LuRu()
{
read_txt();
printf("請輸入錄入學生的數量:");
int n;
//printf("001\n");
scanf("%d",&n);
if (n <= 0 || n > 10 - number)
{
printf("輸入錯誤,或儲存空間不足!\n");
}
else
{
while(number <= 10 && number-5 < n)/*錄入學生信息*/
{
number++;
int iid;
printf("請輸入第%d個學生的學號:", number-5 );
scanf("%d",&iid);
/*驗證錄入是否重復*/
for(int k = 1; k < number ; k++)
{
//printf("- %d -",number);
//printf("- %d -",k);
if(iid == stu[k].id)
{
printf("輸入學號重復!重新輸入!\n");
number--;
break;
}
else if(k == number-1) //說明已經遍歷所有數據,未重復
{
stu[number].id = iid;
printf("請輸入第%d個學生的姓名:", number-5 );
scanf("%s",stu[number].name);
printf("請輸入第%d個學生的成績:", number-5 );
scanf("%d",&stu[number].score);
//printf("001");
break;
}
}
}
}
printf("恭喜,錄入學生成績成功!\n");
XianShi();
}
/******************成績的刪除*****************/
void ShanChu()
{
int id;
int i=1;
printf("請輸入要刪除學生的學號:");
scanf("%d",&id);
for(i; i <= number; i++) /*檢索學號*/
{
if(id == stu[i].id)
{
break;
}
if(i == number) /*檢索結束未找到信息*/
{
printf("未找到該學生【%s】成績\n",id);
return;
}
}
for(int j=i; j <= number; j++)
{
stu[j]=stu[j+1];//把該學生后的數據向前移動1位
}
number--;//數據組總數減一
XianShi();
printf("刪除成功!\n");
return;
}
/******************顯示成績*****************/
void XianShi()
{
printf("[>>>目前已有 %d 位學生的信息<<<] \n",number);
printf("%10s %16s %12s\n", "學號", "姓名", "成績");
for(int k=1; k <= number; k++)
{
printf("%10d%20s%10d\n", stu[k].id, stu[k].name, stu[k].score);
}
}
/******************成績查詢*****************/
void ChaXun()
{
int iid;
int p;
printf("請輸入要查詢學生的學號:");
scanf("%d",&iid);
for(p=1; p <= number; p++)
{
if(iid == stu[p].id)
{
break;
}
if(p == number)
{
printf("【%s】成績不存在\n",iid);
return;
}
}
printf(">>查詢成功!\n");
printf("%10s %16s %12s\n", "學號", "姓名", "成績");
printf("%10d %20s %10d\n", stu[p].id, stu[p].name, stu[p].score);
return;
}
/*******************成績修改******************/
void XiuGai()
{
XianShi();
int iid;
int q;
printf("請輸入要修改學生的學號:");
scanf("%d",&iid);
for(q = 1; q <= number; q++)
{
if(iid == stu[q].id)
{
break;
}
if(q == number)
{
printf("未找到該學生【%d】成績\n",iid);
return;
}
}
printf("請輸入學號:");
scanf("%d",&stu[q].id);
printf("請輸入姓名:");
scanf("%s",&stu[q].name);
printf("請輸入成績:");
scanf("%d",&stu[q].score);
XianShi();
printf("修改成功!\n");
}