无码日韩精品一区二区免费_国产精品原创视频一区二区_97超视频国产免费_日本亚洲欧美在线AⅤ

歡迎來到中博奧技術(shù)有限公司官網(wǎng)

大一c語言學(xué)生成績管理系統(tǒng)

時間:2023-02-01 作者:老師 來源:網(wǎng)絡(luò) 點(diǎn)擊量:

大一c語言學(xué)生成績管理系統(tǒng)

程序如下: #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[](即總分)進(jìn)行排序\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} 有疑問提出

用C語言設(shè)計一個學(xué)生成績管理系統(tǒng)

#include #include

#include #define?MAX?1000/*定義學(xué)生成績信息結(jié)構(gòu)*/struct stu{

char id[8];char name[8];

擴(kuò)展資料:

大一c語言學(xué)生成績管理系統(tǒng)

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)新增)

大一c語言學(xué)生成績管理系統(tǒng)

復(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語言

C語言實(shí)現(xiàn) 學(xué)生成績管理系統(tǒng)(超詳細(xì)) 內(nèi)附源碼

#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ū)下方留言!?。?br>
本人已親測,可用

C語言編寫一個簡單的學(xué)生成績管理系統(tǒng)

C語言程序:

運(yùn)行測試:

學(xué)生成績管理系統(tǒng) 用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ù)用于定位連表中符合要求的接點(diǎn),并返回該指針 */
{
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ù)最高的接點(diǎn) */
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)); /* 新建接點(diǎn)用于保存信息 */
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)容放入接點(diǎn)中 */
{
p->next=NULL;
r->next=p;
r=p; /* 將該接點(diǎn)掛入連中 */
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;
}
}
}
/* */

標(biāo)簽

相關(guān)資訊

我是中博奧客服:小奧
中博奧技術(shù)有限公司& 版權(quán)所有工信部備案號:豫ICP備11015869號-8 Copyright ? 2023-2024

檔案整理檔案數(shù)字化

檔案掃描檔案管理軟件系統(tǒng)

TEL:18937133779

To Top