C語(yǔ)言版學(xué)生信息管理系統(tǒng)
本文實(shí)例為大家分享了C語(yǔ)言版學(xué)生信息管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
一.題目分析
1.功能概述
1)查詢學(xué)生信息
2)添加學(xué)生信息
3)修改學(xué)生信息
4)刪除學(xué)生信息
5)刷新學(xué)生信息
6)保存學(xué)生信息
7)輸出當(dāng)前學(xué)生信息
2.題目要求:
1)使用結(jié)構(gòu)體建立學(xué)生信息體制
2)實(shí)現(xiàn)七大基本功能
3)采用文件存儲(chǔ)學(xué)生信息
二.算法構(gòu)造
1.難點(diǎn)解析----對(duì)文件的操作
1.1文件讀取
FILE * fp;
if ((fp = fopen(filename, "r")) == NULL) return 0;
//從文件讀取信息
while (fscanf(fp, "%s %s %s %d %d %d %d ", &stu[j].StudentId, &stu[j].StudentName, &stu[j].StudentAge, &stu[j].StudentSex, &stu[j].score[0], &stu[j].score[1], &stu[j].score[2]) == 7) {
j++;
}
1.2文件寫入
FILE * fp;
fp = fopen(filename, "w");
for (i = 0; i < n; i++){
fprintf(fp, "%s%s%d%c%.lf%.lf%.lf\n", stu[i].StudentId, stu[i].StudentName, stu[i].StudentAge, stu[i].StudentSex,
stu[i].score[0], stu[i].score[1], stu[i].score[2]);
}
2.流程圖

3.七大基本功能----函數(shù)實(shí)現(xiàn)
3.1菜單函數(shù):通過(guò)菜單建立用戶與程序之間的交流
void menu()/* 界面*/
{
int num;
printf(" \n\n \n\n");
printf(" ******************************************************\n\n");
printf(" * 學(xué)生信息管理系統(tǒng) *\n \n");
printf(" ******************************************************\n\n");
printf("*********************系統(tǒng)功能菜單************************* \n");
printf(" ---------------------- ---------------------- \n");
printf(" ********************************************* \n");
printf(" * 0.系統(tǒng)幫助及說(shuō)明 * * 1.刷新學(xué)生信息 * \n");
printf(" ********************************************* \n");
printf(" * 2.查詢學(xué)生信息 * * 3.修改學(xué)生信息 * \n");
printf(" ********************************************* \n");
printf(" * 4.增加學(xué)生信息 * * 5.按學(xué)號(hào)刪除信息 * \n");
printf(" ********************************************* \n");
printf(" * 6.顯示當(dāng)前信息 * * 7.保存當(dāng)前學(xué)生信息* \n");
printf(" ********************** ********************** \n");
printf(" * 8.退出系統(tǒng) * \n");
printf(" ********************** \n");
printf(" ---------------------- ---------------------- \n");
printf("請(qǐng)選擇菜單編號(hào):");
scanf("%d", &num);
switch (num)
{
case 0:help(); break;
case 1:flush(); break;
case 2:seek(); break;
case 3:modify(); break;
case 4:insert(); break;
case 5:del(); break;
case 6:display(); break;
case 7:save(); break;
case 8:
k = 0;
printf("即將退出程序!\n");
break;
default:printf("請(qǐng)?jiān)?-8之間選擇\n");
}
}
3.2系統(tǒng)幫助與說(shuō)明函數(shù):適用于初次接觸學(xué)生信息管理系統(tǒng)的用戶參考
void help()
{
printf("\n0.歡迎使用系統(tǒng)幫助!\n");
printf("\n1.初次進(jìn)入系統(tǒng)后,請(qǐng)先選擇增加學(xué)生信息;\n");
printf("\n2.按照菜單提示鍵入數(shù)字代號(hào);\n");
printf("\n3.增加學(xué)生信息后,切記保存;\n");
printf("\n4.謝謝您的使用!\n");
}
3.3刷新學(xué)生信息函數(shù)
功能:調(diào)用刷新信息函數(shù)后,文件中再無(wú)學(xué)生信息
int flush(){
char filename[LEN + 1];
int i = 0;
printf("請(qǐng)輸入要刷新學(xué)生信息的文件名:\n");
scanf("%s", filename);
int j = 0;
FILE * fp;
if ((fp = fopen(filename, "r")) == NULL) return 0;
//從文件讀取信息
while (fscanf(fp, "%s %s %s %d %d %d %d ", &stu[j].StudentId, &stu[j].StudentName, &stu[j].StudentAge, &stu[j].StudentSex, &stu[j].score[0], &stu[j].score[1], &stu[j].score[2]) == 7) {
j++;
}
n = j;
printf("刷新成功!!!");
return n;
}
3.4查詢學(xué)生信息函數(shù)
功能:通過(guò)輸入要查詢的學(xué)生學(xué)號(hào)或者姓名,與系統(tǒng)中的學(xué)生信息進(jìn)行對(duì)比,若相等,則輸出該學(xué)生的基本信息;反之,則輸出該學(xué)生在該管理系統(tǒng)中不存在
查詢方式:
1)按照學(xué)號(hào)查詢
2)按照姓名查詢
void seek() /*查找*/
{
int i, item, flag;
char s1[21]; /* 以姓名和學(xué)號(hào)最長(zhǎng)長(zhǎng)度+1為準(zhǔn)*/
printf("------------------\n");
printf("-----1.按學(xué)號(hào)查詢-----\n");
printf("-----2.按姓名查詢-----\n");
printf("-----3.退出本菜單-----\n");
printf("------------------\n");
while (1)
{
printf("請(qǐng)選擇子菜單編號(hào):");
scanf("%d", &item);
flag = 0;
switch (item)
{
case 1:
printf("請(qǐng)輸入要查詢的學(xué)生的學(xué)號(hào):\n");
scanf("%s", s1);
for (i = 0; i<n; i++)
if (strcmp(s1,stu[i].StudentId) == 0)
{
flag = 1;
printf("學(xué)生學(xué)號(hào)\t學(xué)生姓名\t年齡\t性別\tC語(yǔ)言成績(jī)\t高等數(shù)學(xué)\t大學(xué)英語(yǔ)成績(jī)\n");
printf("--------------------------------------------------------------------\n");
printf("%s\t%s\t%d\t%6\t%.1f\t%.1f\t%.1f\n", stu[i].StudentId,stu[i].StudentName,stu[i].StudentAge,stu[i].StudentSex,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
}
if (0 == flag)
printf("該學(xué)號(hào)不存在!\n"); break;
case 2:
printf("請(qǐng)輸入要查詢的學(xué)生的姓名:\n");
scanf("%s", s1);
for (i = 0; i<n; i++)
if (strcmp(stu[i].StudentName, s1) == 0)
{
flag = 1;
printf("學(xué)生學(xué)號(hào)\t學(xué)生姓名\t年齡\t性別\tC語(yǔ)言成績(jī)\t高等數(shù)學(xué)\t大學(xué)英語(yǔ)成績(jī)\n");
printf("--------------------------------------------------------------------\n");
printf("%s\t%s\t%d\t%c\t%.1f\t%.1f\t%.1f\n", stu[i].StudentId, stu[i].StudentName, stu[i].StudentAge, stu[i].StudentSex, stu[i].score[0], stu[i].score[1], stu[i].score[2]);
}
if (0 == flag)
printf("該姓名不存在!\n"); break;
case 3:return;
default:printf("請(qǐng)?jiān)?-3之間選擇\n");
}
}
}
3.5修改學(xué)生信息
功能:通過(guò)輸入學(xué)號(hào)來(lái)選擇要修改的該學(xué)號(hào)學(xué)生的信息內(nèi)容,從而完成修改信息操作;
//修改學(xué)生信息
void modify() /*修改信息*/
{
int i, item, num = -1;
char sex1, s1[LEN + 1], s2[LEN + 1]; /* 以姓名和學(xué)號(hào)最長(zhǎng)長(zhǎng)度+1為準(zhǔn)*/
float score1;
printf("請(qǐng)輸入要要修改的學(xué)生的學(xué)號(hào):\n");
scanf("%s", s1);
for (i = 0; i < n; i++){
if (strcmp(stu[i].StudentId, s1) == 0){/*比較字符串是否相等*/
num = i;
printf("------------------\n");
printf("1.修改姓名\n");
printf("2.修改年齡\n");
printf("3.修改性別\n");
printf("4.修改C語(yǔ)言成績(jī)\n");
printf("5.修改高等數(shù)學(xué)成績(jī)\n");
printf("6.修改大學(xué)英語(yǔ)成績(jī)\n");
printf("7.退出本菜單\n");
printf("------------------\n");
while (1)
{
printf("請(qǐng)選擇子菜單編號(hào):");
scanf("%d", &item);
switch (item)
{
case 1:
printf("請(qǐng)輸入新的姓名:\n");
scanf("%s", s2);
strcpy(stu[num].StudentName, s2);
break;
case 2:
printf("請(qǐng)輸入新的年齡:\n");
scanf("%d", stu[num].StudentAge);
break;
case 3:
printf("請(qǐng)輸入新的性別:\n");
scanf("%s", &sex1);
stu[i].StudentSex = sex1;
break;
case 4:
printf("請(qǐng)輸入新的C語(yǔ)言成績(jī):\n");
scanf("%f", &score1);
stu[num].score[0] = score1;
break;
case 5:
printf("請(qǐng)輸入新的高等數(shù)學(xué)成績(jī):\n");
scanf("%f", &score1);
stu[num].score[1] = score1;
break;
case 6:
printf("請(qǐng)輸入新的大學(xué)英語(yǔ)成績(jī):\n");
scanf("%f", &score1);
stu[num].score[2] = score1;
break;
case 7: return;
default:printf("請(qǐng)?jiān)?-7之間選擇\n");
}
}
printf("修改完畢!請(qǐng)及時(shí)保存!\n");
}
else{
printf("沒(méi)有該學(xué)生學(xué)號(hào)!!!");
}
}
}
3.6添加學(xué)生信息函數(shù)
功能:添加學(xué)生信息,并保存至文件中
//添加學(xué)生信息函數(shù)
void insert() /*插入函數(shù)*/
{
int i = n, j, flag;
printf("請(qǐng)輸入待增加的學(xué)生數(shù):\n");
scanf("%d", &m);
if (m > 0){
do
{
flag = 1;
while (flag)
{
flag = 0;
printf("請(qǐng)輸入第%d位學(xué)生的學(xué)號(hào):\n", i + 1);
scanf("%s", stu[i].StudentId);
for (j = 0; j < i; j++){
if (strcmp(stu[i].StudentId, stu[j].StudentId) == 0){
printf("該學(xué)號(hào)已存在,請(qǐng)重新輸入!\n");
flag = 1;
break;
}
}
}
printf("請(qǐng)輸入第%d 個(gè)學(xué)生的姓名:\n", i+1);
scanf("%s", stu[i].StudentName);
printf("請(qǐng)輸入第%d 個(gè)學(xué)生的年齡:\n", i+1);
scanf("%d", &stu[i].StudentAge);
printf("請(qǐng)輸入第%d 個(gè)學(xué)生的性別:\n", i+1);
scanf(" %c", &stu[i].StudentSex);
printf("請(qǐng)輸入第%d 個(gè)學(xué)生的C語(yǔ)言成績(jī)\n",i+1);
scanf("%f", &stu[i].score[0]);
printf("請(qǐng)輸入第%d 個(gè)學(xué)生的高等數(shù)學(xué)成績(jī):\n", i+1);
scanf("%f", &stu[i].score[1]);
printf("請(qǐng)輸入第%d 個(gè)學(xué)生的大學(xué)英語(yǔ)成績(jī):\n", i+1);
scanf("%f", &stu[i].score[2]);
if (0 == flag){
i++;
}
} while (i<n + m);
}
n += m;
printf("學(xué)生信息增加完畢?。?!\n");
system("pause");
}
3.7刪除學(xué)生信息函數(shù)
功能:通過(guò)輸入要?jiǎng)h除學(xué)生信息的學(xué)號(hào),刪除該學(xué)生在該管理系統(tǒng)中的所有信息;
//刪除學(xué)生信息函數(shù)
void del()
{
int i, j, flag = 0;
char s1[LEN + 1];
printf("請(qǐng)輸入要?jiǎng)h除學(xué)生的學(xué)號(hào):\n");
scanf("%s", s1);
for (i = 0; i < n; i++){
if (strcpy(stu[i].StudentId, s1) == 0){
flag = 1;
//要?jiǎng)h除學(xué)生后面的學(xué)生往前移一位
for (j = i; j < n - 1; j++){
stu[j] = stu[j + 1];
}
}
}
//查找失敗
if (0 == flag){
printf("該學(xué)號(hào)不存在!!!\n");
}
if (1 == flag){
printf("刪除成功?。?!");
//刪除成功,學(xué)生人數(shù)減1
n--;
}
system("pause");
}
3.8顯示當(dāng)前學(xué)生信息
功能:可以輸出進(jìn)行多種操作后的學(xué)生信息管理系統(tǒng)中的所有學(xué)生信息;
//顯示全部數(shù)據(jù)信息
void display()
{
int i;
printf("共有%d位學(xué)生的信息:\n", n);
if (0 != n)
{
printf("學(xué)生學(xué)號(hào) \t學(xué)生姓名 \t年齡 \t性別 \tC語(yǔ)言成績(jī)\t高等數(shù)學(xué) \t大學(xué)英語(yǔ)成績(jī)\n");
printf("--------------------------------------------------------------------\n");
for (i = 0; i<n; i++)
{
printf("%s \t%s \t%d \t%c \t%.1f\t%.1f \t%.1f\n", stu[i].StudentId, stu[i].StudentName, stu[i].StudentAge, stu[i].StudentSex, stu[i].score[0],stu[i].score[1],stu[i].score[2]);
}
}
system("pause");
}
3.8保存學(xué)生信息
功能:將進(jìn)行某些操作后的學(xué)生信息保存到指定文件中
void save(){
int i;
FILE *fp;
char filename[LEN + 1];
printf("請(qǐng)輸入要保存的文件名:\n");
scanf("%s", filename);
fp = fopen(filename, "w");
for (i = 0; i < n; i++){
fprintf(fp, "%s%s%d%c%.lf%.lf%.lf\n", stu[i].StudentId, stu[i].StudentName, stu[i].StudentAge, stu[i].StudentSex,
stu[i].score[0], stu[i].score[1], stu[i].score[2]);
}
printf("保存成功?。?!\n");
fclose(fp);
system("pause");
}
三.源程序代碼
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h> /*I/O函數(shù)*/
#include<stdlib.h> /*其它說(shuō)明*/
#include<string.h> /*字符串函數(shù)*/
#define LEN 15 /* 學(xué)號(hào)和姓名最大字符數(shù),實(shí)際請(qǐng)更改*/
#define N 50 /* 最大學(xué)生人數(shù),實(shí)際請(qǐng)更改*/
int k = 1, n = 0, m = 0;/* n代表當(dāng)前記錄的學(xué)生人數(shù)*/
//函數(shù)聲明
void readfile();
void seek();
void modify();
void insert();
void del();
void display();
void save();
void menu();
//結(jié)構(gòu)體保存學(xué)生信息
struct student{
char StudentId[LEN+1];
char StudentName[LEN+1];
int StudentAge;
char StudentSex;
float score[3];
}stu[N];
//主函數(shù)
int main()
{
while (k)
{
menu();
}
system("pause");
return 0;
}
//系統(tǒng)幫助函數(shù)
void help()
{
printf("\n0.歡迎使用系統(tǒng)幫助!\n");
printf("\n1.初次進(jìn)入系統(tǒng)后,請(qǐng)先選擇增加學(xué)生信息;\n");
printf("\n2.按照菜單提示鍵入數(shù)字代號(hào);\n");
printf("\n3.增加學(xué)生信息后,切記保存;\n");
printf("\n4.謝謝您的使用!\n");
}
//刷新文件
int flush(){
char filename[LEN + 1];
int i = 0;
printf("請(qǐng)輸入要刷新學(xué)生信息的文件名:\n");
scanf("%s", filename);
int j = 0;
FILE * fp;
if ((fp = fopen(filename, "r")) == NULL) return 0;
//從文件讀取信息
while (fscanf(fp, "%s %s %s %d %d %d %d ", &stu[j].StudentId, &stu[j].StudentName, &stu[j].StudentAge, &stu[j].StudentSex, &stu[j].score[0], &stu[j].score[1], &stu[j].score[2]) == 7) {
j++;
}
n = j;
printf("刷新成功!!!");
return n;
}
//查找學(xué)生信息
void seek() /*查找*/
{
int i, item, flag;
char s1[21]; /* 以姓名和學(xué)號(hào)最長(zhǎng)長(zhǎng)度+1為準(zhǔn)*/
printf("------------------\n");
printf("-----1.按學(xué)號(hào)查詢-----\n");
printf("-----2.按姓名查詢-----\n");
printf("-----3.退出本菜單-----\n");
printf("------------------\n");
while (1)
{
printf("請(qǐng)選擇子菜單編號(hào):");
scanf("%d", &item);
flag = 0;
switch (item)
{
case 1:
printf("請(qǐng)輸入要查詢的學(xué)生的學(xué)號(hào):\n");
scanf("%s", s1);
for (i = 0; i<n; i++)
if (strcmp(s1,stu[i].StudentId) == 0)
{
flag = 1;
printf("學(xué)生學(xué)號(hào)\t學(xué)生姓名\t年齡\t性別\tC語(yǔ)言成績(jī)\t高等數(shù)學(xué)\t大學(xué)英語(yǔ)成績(jī)\n");
printf("--------------------------------------------------------------------\n");
printf("%s\t%s\t%d\t%6\t%.1f\t%.1f\t%.1f\n", stu[i].StudentId,stu[i].StudentName,stu[i].StudentAge,stu[i].StudentSex,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
}
if (0 == flag)
printf("該學(xué)號(hào)不存在!\n"); break;
case 2:
printf("請(qǐng)輸入要查詢的學(xué)生的姓名:\n");
scanf("%s", s1);
for (i = 0; i<n; i++)
if (strcmp(stu[i].StudentName, s1) == 0)
{
flag = 1;
printf("學(xué)生學(xué)號(hào)\t學(xué)生姓名\t年齡\t性別\tC語(yǔ)言成績(jī)\t高等數(shù)學(xué)\t大學(xué)英語(yǔ)成績(jī)\n");
printf("--------------------------------------------------------------------\n");
printf("%s\t%s\t%d\t%c\t%.1f\t%.1f\t%.1f\n", stu[i].StudentId, stu[i].StudentName, stu[i].StudentAge, stu[i].StudentSex, stu[i].score[0], stu[i].score[1], stu[i].score[2]);
}
if (0 == flag)
printf("該姓名不存在!\n"); break;
case 3:return;
default:printf("請(qǐng)?jiān)?-3之間選擇\n");
}
}
}
//修改學(xué)生信息
void modify() /*修改信息*/
{
int i, item, num = -1;
char sex1, s1[LEN + 1], s2[LEN + 1]; /* 以姓名和學(xué)號(hào)最長(zhǎng)長(zhǎng)度+1為準(zhǔn)*/
float score1;
printf("請(qǐng)輸入要要修改的學(xué)生的學(xué)號(hào):\n");
scanf("%s", s1);
for (i = 0; i < n; i++){
if (strcmp(stu[i].StudentId, s1) == 0){/*比較字符串是否相等*/
num = i;
printf("------------------\n");
printf("1.修改姓名\n");
printf("2.修改年齡\n");
printf("3.修改性別\n");
printf("4.修改C語(yǔ)言成績(jī)\n");
printf("5.修改高等數(shù)學(xué)成績(jī)\n");
printf("6.修改大學(xué)英語(yǔ)成績(jī)\n");
printf("7.退出本菜單\n");
printf("------------------\n");
while (1)
{
printf("請(qǐng)選擇子菜單編號(hào):");
scanf("%d", &item);
switch (item)
{
case 1:
printf("請(qǐng)輸入新的姓名:\n");
scanf("%s", s2);
strcpy(stu[num].StudentName, s2);
break;
case 2:
printf("請(qǐng)輸入新的年齡:\n");
scanf("%d", stu[num].StudentAge);
break;
case 3:
printf("請(qǐng)輸入新的性別:\n");
scanf("%s", &sex1);
stu[i].StudentSex = sex1;
break;
case 4:
printf("請(qǐng)輸入新的C語(yǔ)言成績(jī):\n");
scanf("%f", &score1);
stu[num].score[0] = score1;
break;
case 5:
printf("請(qǐng)輸入新的高等數(shù)學(xué)成績(jī):\n");
scanf("%f", &score1);
stu[num].score[1] = score1;
break;
case 6:
printf("請(qǐng)輸入新的大學(xué)英語(yǔ)成績(jī):\n");
scanf("%f", &score1);
stu[num].score[2] = score1;
break;
case 7: return;
default:printf("請(qǐng)?jiān)?-7之間選擇\n");
}
}
printf("修改完畢!請(qǐng)及時(shí)保存!\n");
}
else{
printf("沒(méi)有該學(xué)生學(xué)號(hào)!!!");
}
}
}
void sort()//按學(xué)號(hào)排序
{
int i, j, k, *p, *q, s;
char temp[LEN + 1], ctemp;
float ftemp;
for (i = 0; i<n - 1; i++)
{
for (j = n - 1; j>i; j--)
if (strcmp(stu[j - 1].StudentId, stu[j].StudentId)>0)
{
strcpy(temp, stu[j - 1].StudentId);
strcpy(stu[j - 1].StudentId, stu[j].StudentId);
strcpy(stu[j].StudentId, temp);
strcpy(temp, stu[j - 1].StudentName);
strcpy(stu[j - 1].StudentName, stu[j].StudentName);
strcpy(stu[j].StudentName, temp);
ctemp = stu[j - 1].StudentSex;
stu[j - 1].StudentSex = stu[j].StudentSex;
stu[j].StudentSex = ctemp;
p = &stu[j - 1].StudentAge;
q = &stu[j].StudentAge;
s = *q;
*q = *p;
*p = s;
for (k = 0; k<3; k++)
{
ftemp = stu[j - 1].score[k];
stu[j - 1].score[k] = stu[j].score[k];
stu[j].score[k] = ftemp;
}
}
}
}
//添加學(xué)生信息函數(shù)
void insert() /*插入函數(shù)*/
{
int i = n, j, flag;
printf("請(qǐng)輸入待增加的學(xué)生數(shù):\n");
scanf("%d", &m);
if (m > 0){
do
{
flag = 1;
while (flag)
{
flag = 0;
printf("請(qǐng)輸入第%d位學(xué)生的學(xué)號(hào):\n", i + 1);
scanf("%s", stu[i].StudentId);
for (j = 0; j < i; j++){
if (strcmp(stu[i].StudentId, stu[j].StudentId) == 0){
printf("該學(xué)號(hào)已存在,請(qǐng)重新輸入!\n");
flag = 1;
break;
}
}
}
printf("請(qǐng)輸入第%d 個(gè)學(xué)生的姓名:\n", i+1);
scanf("%s", stu[i].StudentName);
printf("請(qǐng)輸入第%d 個(gè)學(xué)生的年齡:\n", i+1);
scanf("%d", &stu[i].StudentAge);
printf("請(qǐng)輸入第%d 個(gè)學(xué)生的性別:\n", i+1);
scanf(" %c", &stu[i].StudentSex);
printf("請(qǐng)輸入第%d 個(gè)學(xué)生的C語(yǔ)言成績(jī)\n",i+1);
scanf("%f", &stu[i].score[0]);
printf("請(qǐng)輸入第%d 個(gè)學(xué)生的高等數(shù)學(xué)成績(jī):\n", i+1);
scanf("%f", &stu[i].score[1]);
printf("請(qǐng)輸入第%d 個(gè)學(xué)生的大學(xué)英語(yǔ)成績(jī):\n", i+1);
scanf("%f", &stu[i].score[2]);
if (0 == flag){
i++;
}
} while (i<n + m);
}
n += m;
printf("學(xué)生信息增加完畢?。?!\n");
system("pause");
}
//刪除學(xué)生信息函數(shù)
void del()
{
int i, j, flag = 0;
char s1[LEN + 1];
printf("請(qǐng)輸入要?jiǎng)h除學(xué)生的學(xué)號(hào):\n");
scanf("%s", s1);
for (i = 0; i < n; i++){
if (strcpy(stu[i].StudentId, s1) == 0){
flag = 1;
//要?jiǎng)h除學(xué)生后面的學(xué)生往前移一位
for (j = i; j < n - 1; j++){
stu[j] = stu[j + 1];
}
}
}
//查找失敗
if (0 == flag){
printf("該學(xué)號(hào)不存在!!!\n");
}
if (1 == flag){
printf("刪除成功?。。?);
//刪除成功,學(xué)生人數(shù)減1
n--;
}
system("pause");
}
//顯示全部數(shù)據(jù)信息
void display()
{
int i;
printf("共有%d位學(xué)生的信息:\n", n);
if (0 != n)
{
printf("學(xué)生學(xué)號(hào) \t學(xué)生姓名 \t年齡 \t性別 \tC語(yǔ)言成績(jī)\t高等數(shù)學(xué) \t大學(xué)英語(yǔ)成績(jī)\n");
printf("--------------------------------------------------------------------\n");
for (i = 0; i<n; i++)
{
printf("%s \t%s \t%d \t%c \t%.1f\t%.1f \t%.1f\n", stu[i].StudentId, stu[i].StudentName, stu[i].StudentAge, stu[i].StudentSex, stu[i].score[0],stu[i].score[1],stu[i].score[2]);
}
}
system("pause");
}
void save(){
int i;
FILE *fp;
char filename[LEN + 1];
printf("請(qǐng)輸入要保存的文件名:\n");
scanf("%s", filename);
fp = fopen(filename, "w");
for (i = 0; i < n; i++){
fprintf(fp, "%s%s%d%c%.lf%.lf%.lf\n", stu[i].StudentId, stu[i].StudentName, stu[i].StudentAge, stu[i].StudentSex,
stu[i].score[0], stu[i].score[1], stu[i].score[2]);
}
printf("保存成功!?。n");
fclose(fp);
system("pause");
}
void menu()/* 界面*/
{
int num;
printf(" \n\n \n\n");
printf(" ******************************************************\n\n");
printf(" * 學(xué)生信息管理系統(tǒng) *\n \n");
printf(" ******************************************************\n\n");
printf("*********************系統(tǒng)功能菜單************************* \n");
printf(" ---------------------- ---------------------- \n");
printf(" ********************************************* \n");
printf(" * 0.系統(tǒng)幫助及說(shuō)明 * * 1.刷新學(xué)生信息 * \n");
printf(" ********************************************* \n");
printf(" * 2.查詢學(xué)生信息 * * 3.修改學(xué)生信息 * \n");
printf(" ********************************************* \n");
printf(" * 4.增加學(xué)生信息 * * 5.按學(xué)號(hào)刪除信息 * \n");
printf(" ********************************************* \n");
printf(" * 6.顯示當(dāng)前信息 * * 7.保存當(dāng)前學(xué)生信息* \n");
printf(" ********************** ********************** \n");
printf(" * 8.退出系統(tǒng) * \n");
printf(" ********************** \n");
printf(" ---------------------- ---------------------- \n");
printf("請(qǐng)選擇菜單編號(hào):");
scanf("%d", &num);
switch (num)
{
case 0:help(); break;
case 1:flush(); break;
case 2:seek(); break;
case 3:modify(); break;
case 4:insert(); break;
case 5:del(); break;
case 6:display(); break;
case 7:save(); break;
case 8:
k = 0;
printf("即將退出程序!\n");
break;
default:printf("請(qǐng)?jiān)?-8之間選擇\n");
}
}
四.調(diào)試、測(cè)試以及實(shí)驗(yàn)結(jié)果
1.調(diào)試:

2.測(cè)試:
輸入數(shù)據(jù)類型與定義時(shí)不符合,程序運(yùn)行過(guò)程中會(huì)出現(xiàn)錯(cuò)誤

3.實(shí)驗(yàn)結(jié)果:
(1)~(9)是一個(gè)連續(xù)的運(yùn)行實(shí)驗(yàn)結(jié)果
(1)運(yùn)行菜單

(2)添加學(xué)生信息

(3)保存學(xué)生信息

(4)顯示全部信息

(5)修改學(xué)生信息

(6)顯示修改后全部信息

(7)刷新學(xué)生信息

(8)保存學(xué)生信息

(9)顯示刷新后的全部信息

五、總結(jié)
編寫一個(gè)功能齊全的、方便用戶操作的學(xué)生管理系統(tǒng),需要長(zhǎng)期的實(shí)踐與積累。
實(shí)踐時(shí)檢驗(yàn)的好辦法,學(xué)到的知識(shí)經(jīng)過(guò)實(shí)踐的檢驗(yàn),才能更好的被自身吸收。文件的操作的程序編寫應(yīng)用對(duì)我來(lái)說(shuō),是一個(gè)沒(méi)有經(jīng)過(guò)多次實(shí)踐的問(wèn)題,所以我在寫這部分程序時(shí),還是有些難度。該程序中還存在一個(gè)問(wèn)題就是,當(dāng)輸入一個(gè)與定義時(shí)不符的數(shù)據(jù),程序在運(yùn)行過(guò)程中會(huì)出現(xiàn)錯(cuò)誤,修改辦法還在思考,歡迎大家來(lái)與我互相共勉。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 學(xué)生信息管理系統(tǒng)C語(yǔ)言版
- C語(yǔ)言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(單鏈表)
- C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之學(xué)生信息管理系統(tǒng)課程設(shè)計(jì)
- C語(yǔ)言單鏈表版學(xué)生信息管理系統(tǒng)
- C語(yǔ)言學(xué)生信息管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- C語(yǔ)言學(xué)生信息管理系統(tǒng)小項(xiàng)目
- C語(yǔ)言數(shù)組實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)設(shè)計(jì)
- C語(yǔ)言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(文件版)
- C語(yǔ)言使用鏈表實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)開(kāi)發(fā)
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)文件版通訊錄的代碼分享
這篇文章主要為大家詳細(xì)介紹了如何利用C語(yǔ)言實(shí)現(xiàn)一個(gè)文件版通訊錄,主要運(yùn)用了結(jié)構(gòu)體,一維數(shù)組,函數(shù),分支與循環(huán)語(yǔ)句等等知識(shí),需要的可以參考一下2023-01-01
C++實(shí)現(xiàn)的分布式游戲服務(wù)端引擎KBEngine詳解
這篇文章主要詳細(xì)介紹了C++實(shí)現(xiàn)的分布式游戲服務(wù)端引擎KBEngine的概念以及使用方法,非常的實(shí)用,有需要的小伙伴可以參考下2015-03-03
Windows下sentry接入C/C++程序的詳細(xì)過(guò)程
sentry作為一個(gè)開(kāi)源的軟件,發(fā)展至今,已經(jīng)非常成熟。它支持的平臺(tái)眾多,甚至于針對(duì)不同的工作者(后臺(tái)、前端、客戶端)都有相應(yīng)的內(nèi)容,這篇文章主要介紹了Windows下sentry接入C/C++程序,需要的朋友可以參考下2022-09-09
C++報(bào)錯(cuò):Id?returned?1exit?status的解決辦法
最近剛學(xué)c語(yǔ)言,不止一次遇到了同一種報(bào)錯(cuò),經(jīng)過(guò)總結(jié)分享給大家,下面這篇文章主要給大家介紹了關(guān)于C++報(bào)錯(cuò):Id?returned?1exit?status的解決辦法,需要的朋友可以參考下2023-04-04
可能是全網(wǎng)最詳細(xì)的Qt連接MySQL數(shù)據(jù)庫(kù)教程
QT眾所周知是一個(gè)開(kāi)源的,以C++為底層的可視化工具庫(kù),下面這篇文章主要給大家介紹了關(guān)于最詳細(xì)的Qt連接MySQL數(shù)據(jù)庫(kù)教程的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04

