電 話:18937133779
網(wǎng) 址:http://oaoy.cn
郵 箱:zboao@qq.com
程序如下: #include\x0d\x0avoid main()\x0d\x0a{\x0d\x0a float student[100][7];\x0d\x0a//student[][0]存放學(xué)號,student[][1]到student[][4]存放四門成績,\x0d\x0a//student[][5]存放總分,student[][6]存放平均分,student[][7]存放排名\x0d\x0a int n,i,j,k,p,t,count,flag;\x0d\x0a int a[100],b[100],c[100];\x0d\x0a//a[]存放排序后的下標(biāo),b[]存放總分(備份),c[]存放排名的數(shù)據(jù)\x0d\x0a printf("輸入學(xué)生的個數(shù):\n");\x0d\x0a scanf("%d",&n);\x0d\x0a for(i=0;i<=n-1;i++)\x0d\x0a {\x0d\x0a printf("輸入第%d個學(xué)生的學(xué)號:",i+1);\x0d\x0a scanf("%f",&student[i][0]);\x0d\x0a for(j=0,student[i][5]=0;j<=3;j++)\x0d\x0a {\x0d\x0a printf("輸入第%d個學(xué)生的第%d門成績:",i+1,j+1);\x0d\x0a scanf("%f",&student[i][j+1]);\x0d\x0a student[i][5]+=student[i][j+1]; //計算總分\x0d\x0a }\x0d\x0a b[i]=student[i][5]; //把總分再賦給b[]數(shù)組,以后排序用\x0d\x0a student[i][6]=student[i][5]/4; //計算平均分\x0d\x0a }\x0d\x0a \x0d\x0a for(i=0;i<=n-2;i++) //對數(shù)組b[](即總分)進行排序\x0d\x0a for(j=0;j<=n-2-i;j++)\x0d\x0a {\x0d\x0a if(b[j]b[i+1])\x0d\x0a {\x0d\x0a c[i]=count;\x0d\x0a count++;\x0d\x0a }\x0d\x0a }\x0d\x0a printf("\n以下是統(tǒng)計結(jié)果:\n");\x0d\x0a printf("學(xué)號 s[1] s[2] s[3] s[4] 總分 平均分 排名\n");\x0d\x0a for(i=0;i<=n-1;i++)\x0d\x0a {\x0d\x0a printf("%.0f\t%.0f\t%.0f\t%.0f\t%.0f\t%.0f\t%f\t%d\n",student[a[i]][0],student[a[i]][1],student[a[i]][2],student[a[i]][3],student[a[i]][4],student[a[i]][5],student[a[i]][6],c[i]);\x0d\x0a }\x0d\x0a} 有疑問提出
#include
#include
char id[8];char name[8];
擴展資料:
short:修飾int,短整型數(shù)據(jù),可省略被修飾的int。(K&R時期引入)
long:修飾int,長整型數(shù)據(jù),可省略被修飾的int。(K&R時期引入)
long long:修飾int,超長整型數(shù)據(jù),可省略被修飾的int。(C99標(biāo)準(zhǔn)新增)
signed:修飾整型數(shù)據(jù),有符號數(shù)據(jù)類型。(C89標(biāo)準(zhǔn)新增)
unsigned:修飾整型數(shù)據(jù),無符號數(shù)據(jù)類型。(K&R時期引入)
restrict:用于限定和約束指針,并表明指針是訪問一個數(shù)據(jù)對象的唯一且初始的方式。(C99標(biāo)準(zhǔn)新增)
復(fù)雜類型關(guān)鍵字
struct:結(jié)構(gòu)體聲明。(K&R時期引入)
union:聯(lián)合體聲明。(K&R時期引入)
enum:枚舉聲明。(C89標(biāo)準(zhǔn)新增)
typedef:聲明類型別名。(K&R時期引入)
sizeof:得到特定類型或特定類型變量的大小。(K&R時期引入)
inline:內(nèi)聯(lián)函數(shù)用于取代宏定義,會在任何調(diào)用它的地方展開。(C99標(biāo)準(zhǔn)新增)
參考資料來源:百度百科-c語言
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#define N 50//定義的學(xué)生數(shù)組的個數(shù)
#define M 1//定義的管理員數(shù)組的個數(shù)
int k;//錄入學(xué)生的個數(shù)
char read_door[20];//讀取文件的"門"
void Add_data(int flag);//增加數(shù)據(jù)
void Count_score(int flag);//求平均成績和總成績
void Delete_data(int flag);//根據(jù)學(xué)號刪除對應(yīng)學(xué)生的成績
int Landing(int key);//登錄程序
void Load_data();//載入數(shù)據(jù)
void Updata_stu(int flag);
void Read_bigdoor(char *b);
void Rank_score(int way, int flag);//按照需求對對應(yīng)的成績排序
void Read_data(char read_door);//讀取數(shù)據(jù)
void Read_door();//讀取"門"值
void Read_main_flag(int *a);
void Read_k();
void Save_bigdoor(char *b);
void Save_data(int flag);//保存數(shù)據(jù)
void Save_door();//保存"門"值
void Save_main_flag(int *a);
void Save_k(int k);
void Screen_rank();
void Screen_search();
void Screen_stu();
void Screen_teacher();
void Screen_stu_teach();
void Screen_onlyteach();
void Search_data(int way, int flag);//按學(xué)號或姓名查找查找
static struct STUDENT//學(xué)生的信息
{
char num[10];
char name[10];
float score[3];
float sum;
float aver;
int rank[4];
}stu[N];
static struct TEACHER//教師的登錄賬號和密碼
{
char num[10];
char code[10];
}teach[M] = { "18061124","991228" };
int main()
{
char bigdoor ='n';//教師可通過bigdoor控制學(xué)生的權(quán)限
char *c=&bigdoor;
int order1, order2, order3;//order為用戶登錄的指令
int door1, door2, door3;
printf ("請輸入管理員登錄指令:\n");
gets(read_door);
if (strcmp(read_door,"Lu Chen")==0)
{
printf("歡迎使用,您目前是擁有最高權(quán)限的管理員,請輸入您的賬號和密碼:\n\n");
printf("\n\n\n");
Screen_onlyteach();
door1 = Landing(1);
if (door1 == 2)
{
printf("\n賬號或密碼不正確");
return 0;
}
}
else
{
Screen_stu_teach();
printf("請輸入序號即選擇登錄選項:");
scanf("%d", &order1);
printf("\n\n");
door1 = Landing(order1);//door1確定用戶的權(quán)限
switch (door1)//提示用戶輸入出錯
{
case 1:
case 3: break;
case 2:printf("\n輸入的賬號或密碼有誤"); return 0;
case 4:printf("\n輸入的號碼有誤"); return 0;
}
}
if (door1 == 1)//老師界面
{
int flag = 0;
int *p=&flag;
char teach_read_key;
printf("\n是否讀取數(shù)據(jù)?(y/n):");
scanf("%*c%c",&teach_read_key);
if(teach_read_key=='y')
{
Read_k();
? ? Read_door();
Read_main_flag(p);
Read_data(read_door[20]);
}
printf("\n\n");
for (int count = 1; count > 0; count++)//利用死循環(huán)來重復(fù)使用功能
{
Screen_teacher();
printf("\n請輸入序號即選擇登錄選項:");
scanf("%d", &order2);
printf("\n\n");
if (order2 == 10)
break;
switch (order2)
{
case 1:
{
Load_data();
flag=1;
Save_main_flag(p);
Save_k(k);
}break;
case 2:Updata_stu(flag); break;
case 3:
{
Screen_search();
printf("請輸入你想查詢成績的方式:");
scanf("%d", &door2);
Search_data(door2, flag);
}break;
case 4:Add_data(flag);break;
case 5:Delete_data(flag);break;
case 6:
{
Screen_rank();
printf("請輸入成績序號來選擇排序:");
scanf("%d", &door2);
Rank_score(door2, flag);
} break;
case 7:
{
Save_data(flag);
Save_door();
Save_k(k);
} break;
case 8:
{
bigdoor ='n';
Save_bigdoor(c);
}break;
case 9:
{
bigdoor ='y';
Save_bigdoor(c);
? }break;
default:printf("您輸入的序號有誤!\n\n");
}
}
}
else//學(xué)生界面
{
Read_k();
Read_data('y');
for (int k = 1; k > 0; k++)
{
Screen_stu();
printf("請輸入下一步操作的序號:");
scanf("%d", &order3);
if (order3 == 3)
break;
switch (order3)
{
case 1:
{
Screen_search();
printf("請輸入你想查詢成績的方式");
scanf("%d", &door3);
Search_data(door3, 1);
}break;
case 2:
{
Screen_rank();
printf("請輸入成績序號來選擇排序:");
scanf("%d", &door3);
Rank_score(door3, 1);
}break;
default:printf("輸入的操作序號有誤\n\n");
}
}
}
return 0;
}
int Landing(int key)//登錄程序
{
char num[10];
char code[10];
if (key == 1)
{
printf("請輸入賬號:");
scanf("%s", num);
printf("\n請輸入密碼:");
scanf("%s", code);
for (int i = 0; i < M; i++)
if (strcmp(teach[i].num, num) == 0 && strcmp(teach[i].code, code) == 0)//判斷登陸賬號和密碼是否正確
return 1;
else
return 2;
}
else if (key == 2)
{
return 3;
}
else
{
return 4;
}
}
void Search_data(int way, int flag)//按學(xué)號或姓名查找查找
{
int Search_flag = 1;
if (flag)
{
char num[10], name[10];
int i;
if (way == 1)
{
printf("\n請輸入學(xué)號:");
scanf("%s", num);
for (i = 0; i < k; i++)
{
if (strcmp(stu[i].num, num) == 0)//判斷學(xué)號存不存在
{
printf("\n姓名:%s\n學(xué)號:%s\nsubject1:%f\nsubject2:%f\nsubject3:%f\nsum:%f\naver:%f\n", stu[i].name, stu[i].num, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].sum, stu[i].aver);
Search_flag = 0;
break;
}
}
if (Search_flag)
printf("\n您輸入的學(xué)號有誤\n");
}
else if (way == 2)
{
printf("\n請輸入姓名:");
scanf("%s", name);
for (i = 0; i < N; i++)
{
if (strcmp(stu[i].name, name) == 0)//判斷姓名存不存在
{
printf("\n姓名:%s\n學(xué)號:%s\nsubject1:%f\nsubject2:%f\nsubject3:%f\nsum:%f\naver:%f\n", stu[i].name, stu[i].num, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].sum, stu[i].aver);
flag = 0;
break;
}
}
if (flag)
printf("\n輸入的姓名有誤\n");
}
else
printf("\n輸入的序號有誤\n");
}
else
{
printf("\n您還沒有載入數(shù)據(jù)\n");
}
}
void Count_score(int flag)//求平均成績和總成績
{
if (flag)
{
for (int i = 0; i < k; i++)
{
stu[i].sum = stu[i].score[0] + stu[i].score[1] + stu[i].score[2];
stu[i].aver = stu[i].sum / 3;
}
}
else
{
printf("\n您還沒有載入數(shù)據(jù)\n");
}
}
void Load_data()//載入數(shù)據(jù)
{
printf("輸入錄入學(xué)生成績個數(shù):");
scanf("%d", &k);
for (int i = 0; i < k; i++)
{
scanf("%s%s%f%f%f", stu[i].num, stu[i].name, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]);
Count_score(1);
}
}
void Rank_score(int way, int flag)//按照需求對對應(yīng)的成績排序
{
int i, j, n, temp;
if (flag)
{
for (i = 0; i < 4; i++)
for (j = 0; j < k; j++)
stu[j].rank[i] = j + 1;
if (way == 1)
{
for (i = 0; i < 3; i++)
for (j = 0; j < k; j++)
for (n = j + 1; n < k; n++)
if (stu[j].score[i] < stu[n].score[i])
{
temp = stu[j].rank[i];
stu[j].rank[i] = stu[n].rank[i];
stu[n].rank[i] = temp;
}
printf("\n");
for (i = 0; i < k; i++)
printf("姓名:%s 學(xué)號:%s subject1:%d subject2:%d subject3:%d\n", stu[i].name, stu[i].num, stu[i].rank[0], stu[i].rank[1], stu[i].rank[2]);
}
else if (way == 2)
{
for (j = 0; j < k; j++)
for (n = j + 1; n < k; n++)
if (stu[j].sum < stu[n].sum)
{
temp = stu[j].rank[3];
stu[j].rank[3] = stu[n].rank[3];
stu[n].rank[3] = temp;
}
printf("\n");
for (i = 0; i < k; i++)
printf("姓名:%s 學(xué)號:%s sum: %d\n", stu[i].name, stu[i].num, stu[i].rank[3]);
}
else
{
printf("\n輸入的序號有誤\n");
}
}
else
{
printf("\n您還沒有載入數(shù)據(jù)\n");
}
}
void Delete_data(int flag)//根據(jù)學(xué)號刪除對應(yīng)學(xué)生的成績
{
if (flag)
{
int i, j;
char num[10];
printf("\n請輸入您想要刪除信息的學(xué)號:");
scanf("%s", num);
for (i = 0; i < k; i++)
{
if (strcmp(stu[i].num, num) == 0)
for (j = i + 1; j < k; j++)
{
stu[i] = stu[j];
Count_score(1);
}
}
k--;
Save_k(k);
}
else
{
printf("\n您還沒有載入數(shù)據(jù)\n");
}
}
void Updata_stu(int flag)//根據(jù)學(xué)號修改學(xué)生的成績
{
int Updata_flag = 1;
if (flag)
{
char num[10];
float subject1, subject2, subject3;
printf("\n請輸入您想要修改學(xué)生的學(xué)號:");
scanf("%s", num);
printf("\n請輸入您想要更改的學(xué)生三科的成績:");
scanf("%f%f%f", &subject1, &subject2, &subject3);
for (int i = 0; i < k; i++)
if (strcmp(stu[i].num, num) == 0)
{
stu[i].score[0] = subject1;
stu[i].score[1] = subject2;
stu[i].score[2] = subject3;
Updata_flag = 0;
Count_score(1);
}
if (Updata_flag)
{
printf("\n輸入學(xué)號有誤\n");
}
}
else
{
printf("\n您還沒有載入數(shù)據(jù)\n");
}
}
void Save_data(int flag)//保存數(shù)據(jù)
{
if(flag)
{
FILE *fp;
if((fp=fopen("load.txt","w"))==NULL)
{
printf("Save_data error!");
exit(0);
}
for(int i=0;i<k;i++)
{
fwrite(&stu[i],sizeof(STUDENT),1,fp);
}
fclose(fp);
printf("成功保存數(shù)據(jù)!\n\n");
read_door[20]='y';
}
else
{
printf("\n您還沒有載入數(shù)據(jù)\n");
}
}
void Read_data(char read_door)//讀取數(shù)據(jù)
{
if(read_door=='y')
{
FILE *fp;
if((fp=fopen("load.txt","r"))==NULL)
{
printf("Read_data error!");
exit(0);
}
for(int i=0;i<k;i++)
{
fread(&stu[i],sizeof(STUDENT),1,fp);
}
fclose(fp);
}
else
{
printf("\n沒有保存數(shù)據(jù)的記錄\n");
}
}
void Save_door()//保存"門"值
{
FILE *fp;
if((fp=fopen("door.txt","w"))==NULL)
{
printf("Save_door error!");
exit(0);
}
fputc(read_door[20],fp);
fclose(fp);
}
void Read_door()//讀取"門"值
{
FILE *fp;
if((fp=fopen("door.txt","r"))==NULL)
{
printf("Read_door error!");
exit(0);
}
read_door[20]=fgetc(fp);
fclose(fp);
}
void Save_main_flag(int *a)
{
FILE *fp;
if((fp=fopen("flag.txt","w"))==NULL)
{
printf("Save_main_flag error!");
exit(0);
}
fprintf(fp,"%d",*a);
fclose(fp);
}
void Read_main_flag(int *a)
{
FILE *fp;
if((fp=fopen("flag.txt","r"))==NULL)
{
printf("Read_main_flag error!");
exit(0);
}
fscanf(fp,"%d",a);
fclose(fp);
}
void Save_bigdoor(char *b)
{
FILE *fp;
if((fp=fopen("bigdoor.txt","w"))==0)
{
printf("Save_bigdoor error!");
exit(0);
}
fputc(*b,fp);
fclose(fp);
}
void Read_bigdoor(char *b)
{
FILE *fp;
if((fp=fopen("bigdoor.txt","r"))==0)
{
printf("Read_bigdoor error!");
exit(0);
}
*b=fgetc(fp);
fclose(fp);
}
void Save_k(int k)
{
FILE *fp;
if((fp=fopen("k.txt","w"))==0)
{
printf("Save_k error!");
exit(0);
}
fprintf(fp,"%d",k);
fclose(fp);
}
void Read_k()
{
FILE *fp;
if((fp=fopen("k.txt","r"))==0)
{
printf("Read_k error!");
exit(0);
}
fscanf(fp,"%d",&k);
fclose(fp);
}
void Add_data(int flag)//增加數(shù)據(jù)
{
int i, j,count=k;
char num[10], name[10];
float subject1, subject2, subject3;
if (flag)
{
printf("\n輸入您想增加的數(shù)據(jù)條數(shù):");
scanf("%d", &i);
for (j = 0; j < i; j++)
{
printf("\n輸入增加的學(xué)生學(xué)號,姓名,三門科目成績");
scanf("%s%s%f%f%f", num, name, &subject1, &subject2, &subject3);
strcpy(stu[count + j].num, num);
strcpy(stu[count+ j].name, name);
stu[count+ j].score[0] = subject1;
stu[count + j].score[1] = subject2;
stu[count+ j].score[2] = subject3;
k++;
Count_score(1);
}
Save_k(k);
}
else
{
printf("\n輸入您想增加的數(shù)據(jù)條數(shù):");
scanf("%d", &i);
for (j = 0; j < i; j++)
{
printf("\n輸入增加的學(xué)生學(xué)號,姓名,三門科目成績");
scanf("%s%s%f%f%f", num, name, &subject1, &subject2, &subject3);
strcpy(stu[j].num, num);
strcpy(stu[j].name, name);
stu[j].score[0] = subject1;
stu[j].score[1] = subject2;
stu[j].score[2] = subject3;
k++;
Count_score(1);
}
}
}
void Screen_search()//查詢界面
{
printf("*****************學(xué)生成績查詢界面*******************\n\n\n");
printf("——————————————————————————\n");
printf("|? ? ? ? ? ? ? ①? 學(xué)生學(xué)號查詢? ? ? ? ? ? ? ? ? ? |\n");
printf("|? ? ? ? ? ? ? ②? 學(xué)生姓名查詢? ? ? ? ? ? ? ? ? ? |\n");
printf("——————————————————————————\n");
}
void Screen_rank()//成績排名方式界面
{
printf("*****************學(xué)生成績排名界面*******************\n\n\n");
printf("——————————————————————————\n");
printf("|? ? ? ? ? ? ? ①? ? subject? ? ? ? ? ? ? ? ? ? ? |\n");
printf("|? ? ? ? ? ? ? ②? ? ? sum? ? ? ? ? ? ? ? ? ? ? ? |\n");
printf("——————————————————————————\n");
}
void Screen_teacher()
{
printf("*****************教師管理操作界面*******************\n\n\n");
printf("——————————————————————————\n");
printf("|? ? ? ? ? ? ? ①? ? 數(shù)據(jù)載入? ? ? ? ? ? ? ? ? ? ? |\n");
printf("|? ? ? ? ? ? ? ②? ? 修改數(shù)據(jù)? ? ? ? ? ? ? ? ? ? ? |\n");
printf("|? ? ? ? ? ? ? ③? ? 查詢數(shù)據(jù)? ? ? ? ? ? ? ? ? ? ? |\n");
printf("|? ? ? ? ? ? ? ④? ? 添加數(shù)據(jù)? ? ? ? ? ? ? ? ? ? ? |\n");
printf("|? ? ? ? ? ? ? ⑤? ? 刪除數(shù)據(jù)? ? ? ? ? ? ? ? ? ? ? |\n");
printf("|? ? ? ? ? ? ? ⑥? ? 成績排序? ? ? ? ? ? ? ? ? ? ? |\n");
printf("|? ? ? ? ? ? ? ⑦? ? 保存數(shù)據(jù)? ? ? ? ? ? ? ? ? ? ? |\n");
printf("|? ? ? ? ? ? ? ⑧? ? 學(xué)生限制? ? ? ? ? ? ? ? ? ? ? |\n");
printf("|? ? ? ? ? ? ? ⑨? ? 學(xué)生開放? ? ? ? ? ? ? ? ? ? ? |\n");
printf("|? ? ? ? ? ? ? ⑩? ? ? 退出? ? ? ? ? ? ? ? ? ? ? ? |\n");
printf("——————————————————————————\n");
}
void Screen_stu_teach()
{
printf("*****************學(xué)生成績管理系統(tǒng)*******************\n\n\n");
printf("——————————————————————————\n");
printf("|? ? ? ? ? ? ? ① 教師管理員登錄? ? ? ? ? ? ? ? ? |\n");
printf("|? ? ? ? ? ? ? ②? 學(xué)生端登錄? ? ? ? ? ? ? ? ? ? |\n");
printf("——————————————————————————\n");
}
void Screen_onlyteach()
{
printf("*****************教師登陸操作界面*******************\n\n\n");
printf("——————————————————————————\n");
printf("|? ? ? ? ? ? ? ① 教師管理員登錄? ? ? ? ? ? ? ? ? |\n");
printf("——————————————————————————\n");
}
void Screen_stu()
{
printf("*****************學(xué)生用戶操作界面*******************\n\n\n");
printf("——————————————————————————\n");
printf("|? ? ? ? ? ? ? ①? 學(xué)生成績查詢? ? ? ? ? ? ? ? ? ? |\n");
printf("|? ? ? ? ? ? ? ②? 成績排名查詢? ? ? ? ? ? ? ? ? ? |\n");
printf("|? ? ? ? ? ? ? ③? ? ? 退出? ? ? ? ? ? ? ? ? ? ? ? |\n");
printf("——————————————————————————\n");
}
以上內(nèi)容僅是本人通過多方瀏覽網(wǎng)上資料,自己敲出來的。
如有問題,大家可以在評論區(qū)下方留言?。?!
本人已親測,可用
C語言程序:
運行測試:
網(wǎng)上找的,給你參考:
c語言學(xué)生成績管理系統(tǒng)
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int shoudsave=0; /* */
struct student
{
char num[10];/* 學(xué)號 */
char name[20];
char sex[4];
int cgrade;
int mgrade;
int egrade;
int totle;
int ave;
char neartime[10];/* 最近更新時間 */
};
typedef struct node
{
struct student data;
struct node *next;
}Node,*Link;
void menu()
{
printf("********************************************************************************");
printf("\t1登記學(xué)生資料\t\t\t\t\t2刪除學(xué)生資料\n");
printf("\t3查詢學(xué)生資料\t\t\t\t\t4修改學(xué)生資料\n");
printf("\t5保存學(xué)生資料\t\t\t\t\t0退出系統(tǒng)\n");
printf("********************************************************************************\n");
}
void printstart()
{
printf("-----------------------------------------------------------------------\n");
}
void Wrong()
{
printf("\n=====>提示:輸入錯誤!\n");
}
void Nofind()
{
printf("\n=====>提示:沒有找到該學(xué)生!\n");
}
void printc() /* 本函數(shù)用于輸出中文 */
{
printf(" 學(xué)號\t 姓名 性別 英語成績 數(shù)學(xué)成績 C語言成績 總分 平均分\n");
}
void printe(Node *p)/* 本函數(shù)用于輸出英文 */
{
printf("%-12s%s\t%s\t%d\t%d\t%d\t %d\t %d\n",p->data.num,p->data.name,p->data.sex,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.totle,p->data.ave);
}
Node* Locate(Link l,char findmess[],char nameornum[]) /* 該函數(shù)用于定位連表中符合要求的接點,并返回該指針 */
{
Node *r;
if(strcmp(nameornum,"num")==0) /* 按學(xué)號查詢 */
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.num,findmess)==0)
return r;
r=r->next;
}
}
else if(strcmp(nameornum,"name")==0) /* 按姓名查詢 */
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.name,findmess)==0)
return r;
r=r->next;
}
}
return 0;
}
void Add(Link l) /* 增加學(xué)生 */
{
Node *p,*r,*s;
char num[10];
r=l;
s=l->next;
while(r->next!=NULL)
r=r->next; /* 將指針置于最末尾 */
while(1)
{
printf("請你輸入學(xué)號(以'0'返回上一級菜單:)");
scanf("%s",num);
if(strcmp(num,"0")==0)
break;
while(s)
{
if(strcmp(s->data.num,num)==0)
{
printf("=====>提示:學(xué)號為'%s'的學(xué)生已經(jīng)存在,若要修改請你選擇'4 修改'!\n",num);
printstart();
printc();
printe(s);
printstart();
printf("\n");
return;
}
s=s->next;
}
p=(Node *)malloc(sizeof(Node));
strcpy(p->data.num,num);
printf("請你輸入姓名:");
scanf("%s",p->data.name);
getchar();
printf("請你輸入性別:");
scanf("%s",p->data.sex);
getchar();
printf("請你輸入c語言成績:");
scanf("%d",&p->data.cgrade);
getchar();
printf("請你輸入數(shù)學(xué)成績:");
scanf("%d",&p->data.mgrade);
getchar();
printf("請你輸入英語成績:");
scanf("%d",&p->data.egrade);
getchar();
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle / 3;
/* 信息輸入已經(jīng)完成 */
p->next=NULL;
r->next=p;
r=p;
shoudsave=1;
}
}
void Qur(Link l) /* 查詢學(xué)生 */
{
int sel;
char findmess[20];
Node *p;
if(!l->next)
{
printf("\n=====>提示:沒有資料可以查詢!\n");
return;
}
printf("\n=====>1按學(xué)號查找\n=====>2按姓名查找\n");
scanf("%d",&sel);
if(sel==1)/* 學(xué)號 */
{
printf("請你輸入要查找的學(xué)號:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("\t\t\t\t查找結(jié)果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else if(sel==2) /* 姓名 */
{
printf("請你輸入要查找的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
printf("\t\t\t\t查找結(jié)果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else
Wrong();
}
void Del(Link l) /* 刪除 */
{
int sel;
Node *p,*r;
char findmess[20];
if(!l->next)
{
printf("\n=====>提示:沒有資料可以刪除!\n");
return;
}
printf("\n=====>1按學(xué)號刪除\n=====>2按姓名刪除\n");
scanf("%d",&sel);
if(sel==1)
{
printf("請你輸入要刪除的學(xué)號:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:該學(xué)生已經(jīng)成功刪除!\n");
shoudsave=1;
}
else
Nofind();
}
else if(sel==2)
{
printf("請你輸入要刪除的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:該學(xué)生已經(jīng)成功刪除!\n");
shoudsave=1;
}
else
Nofind();
}
else
Wrong();
}
void Modify(Link l)
{
Node *p;
char findmess[20];
if(!l->next)
{
printf("\n=====>提示:沒有資料可以修改!\n");
return;
}
printf("請你輸入要修改的學(xué)生學(xué)號:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("請你輸入新學(xué)號(原來是%s):",p->data.num);
scanf("%s",p->data.num);
printf("請你輸入新姓名(原來是%s):",p->data.name);
scanf("%s",p->data.name);
getchar();
printf("請你輸入新性別(原來是%s):",p->data.sex);
scanf("%s",p->data.sex);
printf("請你輸入新的c語言成績(原來是%d分):",p->data.cgrade);
scanf("%d",&p->data.cgrade);
getchar();
printf("請你輸入新的數(shù)學(xué)成績(原來是%d分):",p->data.mgrade);
scanf("%d",&p->data.mgrade);
getchar();
printf("請你輸入新的英語成績(原來是%d分):",p->data.egrade);
scanf("%d",&p->data.egrade);
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle/3;
printf("\n=====>提示:資料修改成功!\n");
shoudsave=1;
}
else
Nofind();
}
void Disp(Link l)
{
int count=0;
Node *p;
p=l->next;
if(!p)
{
printf("\n=====>提示:沒有資料可以顯示!\n");
return;
}
printf("\t\t\t\t顯示結(jié)果\n");
printstart();
printc();
printf("\n");
while(p)
{
printe(p);
p=p->next;
}
printstart();
printf("\n");
}
void Tongji(Link l)
{
Node *pm,*pe,*pc,*pt,*pa; /* 用于指向分?jǐn)?shù)最高的接點 */
Node *r=l->next;
if(!r)
{
printf("\n=====>提示:沒有資料可以統(tǒng)計!\n");
return ;
}
pm=pe=pc=pt=pa=r;
while(r!=NULL)
{
if(r->data.cgrade>=pc->data.cgrade)
pc=r;
if(r->data.mgrade>=pm->data.mgrade)
pm=r;
if(r->data.egrade>=pe->data.egrade)
pe=r;
if(r->data.totle>=pt->data.totle)
pt=r;
if(r->data.ave>=pa->data.ave)
pa=r;
r=r->next;
}
printf("------------------------------統(tǒng)計結(jié)果--------------------------------\n");
printf("總分最高者:\t%s %d分\n",pt->data.name,pt->data.totle);
printf("平均分最高者:\t%s %d分\n",pa->data.name,pa->data.ave);
printf("英語最高者:\t%s %d分\n",pe->data.name,pe->data.egrade);
printf("數(shù)學(xué)最高者:\t%s %d分\n",pm->data.name,pm->data.mgrade);
printf("c語言最高者:\t%s %d分\n",pc->data.name,pc->data.cgrade);
printstart();
}
void Sort(Link l)
{
Link ll;
Node *p,*rr,*s;
ll=(Link)malloc(sizeof(Node)); /* 用于做新的連表 */
ll->next=NULL;
if(l->next==NULL)
{
printf("\n=====>提示:沒有資料可以排序!\n");
return ;
}
p=l->next;
while(p)
{
s=(Node*)malloc(sizeof(Node)); /* 新建接點用于保存信息 */
s->data=p->data;
s->next=NULL;
rr=ll;
while(rr->next!=NULL && rr->next->data.totle>=p->data.totle)
rr=rr->next;
if(rr->next==NULL)
rr->next=s;
else
{
s->next=rr->next;
rr->next=s;
}
p=p->next;
}
free(l);
l->next=ll->next;
printf("\n=====>提示:排序已經(jīng)完成!\n");
}
void Save(Link l)
{
FILE* fp;
Node *p;
int flag=1,count=0;
fp=fopen("c:\\student","wb");
if(fp==NULL)
{
printf("\n=====>提示:重新打開文件時發(fā)生錯誤!\n");
exit(1);
}
p=l->next;
while(p)
{
if(fwrite(p,sizeof(Node),1,fp)==1)
{
p=p->next;
count++;
}
else
{
flag=0;
break;
}
}
if(flag)
{
printf("\n=====>提示:文件保存成功.(有%d條記錄已經(jīng)保存.)\n",count);
shoudsave=0;
}
fclose(fp);
}
void main()
{
Link l;/* 連表 */
FILE *fp; /* 文件指針 */
int sel;
char ch;
char jian;
int count=0;
Node *p,*r;
l=(Node*)malloc(sizeof(Node));
l->next=NULL;
r=l;
fp=fopen("C:\\student","rb");
if(fp==NULL)
{
printf("\n=====>提示:文件還不存在,是否創(chuàng)建?(y/n)\n");
scanf("%c",&jian);
if(jian=='y'||jian=='Y')
fp=fopen("C:\\student","wb");
else
exit(0);
}
printf("\n=====>提示:文件已經(jīng)打開,正在導(dǎo)入記錄......\n");
while(!feof(fp))
{
p=(Node*)malloc(sizeof(Node));
if(fread(p,sizeof(Node),1,fp)) /* 將文件的內(nèi)容放入接點中 */
{
p->next=NULL;
r->next=p;
r=p; /* 將該接點掛入連中 */
count++;
}
}
fclose(fp); /* 關(guān)閉文件 */
printf("\n=====>提示:記錄導(dǎo)入完畢,共導(dǎo)入%d條記錄.\n",count);
while(1)
{
menu();
printf("請你選擇操作:");
scanf("%d",&sel);
if(sel==0)
{
if(shoudsave==1)
{ getchar();
printf("\n=====>提示:資料已經(jīng)改動,是否將改動保存到文件中(y/n)?\n");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save(l);
}
printf("\n=====>提示:你已經(jīng)退出系統(tǒng),再見!\n");
break;
}
switch(sel)
{
case 1:Add(l);break; /* 增加學(xué)生 */
case 2:Del(l);break;/* 刪除學(xué)生 */
case 3:Qur(l);break;/* 查詢學(xué)生 */
case 4:Modify(l);break;/* 修改學(xué)生 */
case 5:Save(l);break;/* 保存學(xué)生 */
case 9:printf("\t\t\t==========幫助信息==========\n");break;
default: Wrong();getchar();break;
}
}
}
/* */