C语言程序设计学生成绩管理系统

C语言程序设计学生成绩管理系统,第1张

#include "stdioh"

/定义学生结构体/

struct Student

{

char ID[20];

char Name[20];

float Mark1;

float Mark2;

float Mark3;

float Average;

};

/声明学生数组及学生数量/

struct Student students[1000];

int num=0;

/求平均值/

float Avg(struct Student stu)

{

return (stuMark1+stuMark2+stuMark3)/3;

}

/通过学号返回数组下标/

int Student_SearchByIndex(char id[])

{

int i;

for (i=0;i<num;i++)

{

if (strcmp(students[i]ID,id)==0)

{

return i;

}

}

return -1;

}

/通过姓名返回数组下标/

int Student_SearchByName(char name[])

{

int i;

for (i=0;i<num;i++)

{

if (strcmp(students[i]Name,name)==0)

{

return i;

}

}

return -1;

}

/显示单条学生记录/

void Student_DisplaySingle(int index)

{

printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","成绩","成绩","成绩","平均成绩");

printf("-------------------------------------------------------------\n");

printf("%10s%10s%82f%82f%82f%102f\n",students[index]ID,students[index]Name,

students[index]Mark1,students[index]Mark2,students[index]Mark3,students[index]Average);

}

/插入学生信息/

void Student_Insert()

{

while(1)

{

printf("请输入学号:");

scanf("%s",&students[num]ID);

getchar();

printf("请输入姓名:");

scanf("%s",&students[num]Name);

getchar();

printf("请输入成绩:");

scanf("%f",&students[num]Mark1);

getchar();

printf("请输入成绩:");

scanf("%f",&students[num]Mark2);

getchar();

printf("请输入成绩:");

scanf("%f",&students[num]Mark3);

getchar();

students[num]Average=Avg(students[num]);

num++;

printf("是否继续(y/n)");

if (getchar()=='n')

{

break;

}

}

}

/修改学生信息/

void Student_Modify()

{

float mark1,mark2,mark3;

while(1)

{

char id[20];

int index;

printf("请输入要修改的学生的学号:");

scanf("%s",&id);

getchar();

index=Student_SearchByIndex(id);

if (index==-1)

{

printf("学生不存在!\n");

}

else

{

printf("你要修改的学生信息为:\n");

Student_DisplaySingle(index);

printf("-- 请输入新值--\n");

printf("请输入学号:");

scanf("%s",&students[index]ID);

getchar();

printf("请输入姓名:");

scanf("%s",&students[index]Name);

getchar();

printf("请输入成绩:");

scanf("%f",&students[index]Mark1);

getchar();

printf("请输入成绩:");

scanf("%f",&students[index]Mark2);

getchar();

printf("请输入成绩:");

scanf("%f",&students[index]Mark3);

getchar();

students[index]Average=Avg(students[index]);

}

printf("是否继续(y/n)");

if (getchar()=='n')

{

break;

}

}

}

/删除学生信息/

void Student_Delete()

{

int i;

while(1)

{

char id[20];

int index;

printf("请输入要删除的学生的学号:");

scanf("%s",&id);

getchar();

index=Student_SearchByIndex(id);

if (index==-1)

{

printf("学生不存在!\n");

}

else

{

printf("你要删除的学生信息为:\n");

Student_DisplaySingle(index);

printf("是否真的要删除(y/n)");

if (getchar()=='y')

{

for (i=index;i<num-1;i++)

{

students[i]=students[i+1];

}

num--;

}

getchar();

}

printf("是否继续(y/n)");

if (getchar()=='n')

{

break;

}

}

}

/按姓名查询/

void Student_Select()

{

while(1)

{

char name[20];

int index;

printf("请输入要查询的学生的姓名:");

scanf("%s",&name);

getchar();

index=Student_SearchByName(name);

if (index==-1)

{

printf("学生不存在!\n");

}

else

{

printf("你要查询的学生信息为:\n");

Student_DisplaySingle(index);

}

printf("是否继续(y/n)");

if (getchar()=='n')

{

break;

}

}

}

/按平均值排序/

void Student_SortByAverage()

{

int i,j;

struct Student tmp;

for (i=0;i<num;i++)

{

for (j=1;j<num-i;j++)

{

if (students[j-1]Average<students[j]Average)

{

tmp=students[j-1];

students[j-1]=students[j];

students[j]=tmp;

}

}

}

}

/显示学生信息/

void Student_Display()

{

int i;

printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","成绩","成绩","成绩","平均成绩");

printf("-------------------------------------------------------------\n");

for (i=0;i<num;i++)

{

printf("%10s%10s%82f%82f%82f%102f\n",students[i]ID,students[i]Name,

students[i]Mark1,students[i]Mark2,students[i]Mark3,students[i]Average);

}

}

/将学生信息从文件读出/

void IO_ReadInfo()

{

FILE fp;

int i;

if ((fp=fopen("Databasetxt","rb"))==NULL)

{

printf("不能打开文件!\n");

return;

}

if (fread(&num,sizeof(int),1,fp)!=1)

{

num=-1;

}

else

{

for(i=0;i<num;i++)

{

fread(&students[i],sizeof(struct Student),1,fp);

}

}

fclose(fp);

}

/将学生信息写入文件/

void IO_WriteInfo()

{

FILE fp;

int i;

if ((fp=fopen("Databasetxt","wb"))==NULL)

{

printf("不能打开文件!\n");

return;

}

if (fwrite(&num,sizeof(int),1,fp)!=1)

{

printf("写入文件错误!\n");

}

for (i=0;i<num;i++)

{

if (fwrite(&students[i],sizeof(struct Student),1,fp)!=1)

{

printf("写入文件错误!\n");

}

}

fclose(fp);

}

/主程序/

main()

{

int choice;

IO_ReadInfo();

while(1)

{

/主菜单/

printf("\n------ 学生成绩管理系统------\n");

printf("1 增加学生记录\n");

printf("2 修改学生记录\n");

printf("3 删除学生记录\n");

printf("4 按姓名查询学生记录\n");

printf("5 按平均成绩排序\n");

printf("6 退出\n");

printf("请选择(1-6):");

scanf("%d",&choice);

getchar();

switch(choice)

{

case 1:

Student_Insert();

break;

case 2:

Student_Modify();

break;

case 3:

Student_Delete();

break;

case 4:

Student_Select();

break;

case 5:

Student_SortByAverage();

Student_Display();

break;

case 6:

exit();

break;

}

IO_WriteInfo();

}

}

我这的基本上能满足你的要求!

有些模块没有自己添加下就OK 咯!

#ifndef H_STUDENT_HH /xxx如果没有定义xxx/

#define H_STUDENT_HH /xxx定义xx/

#include "stdioh"

#include "stringh"

#include "malloch"

#define LEN sizeof(struct message_student) /一个结构体数组元素的长度/

#define numsubs 5 /学科数目/

typedef struct message_student /结构体定义/

{

char number[6];

char name[20];

char sex[4];

float subject[numsubs];

float score;

float average;

int index;

}student;

extern int numstus; /学生数目/

extern student pointer; /指向结构体数组/

extern int lens;

int menu_select(); /函数声明/

int openfile(student stu[]);

int findrecord(student stud[]);

int writetotext(student stud[]);

void welcome();

void display1();

void showtable();

void sort(student stu[]);

void deleterecord(student stu[],int i);

void addrecord(student stud[]);

void display(student stud[],int n1,int n2);

void amendrecord(student stud[]);

void count(student stud[]);

void sortnum(student stud[]);

void sortnum2(student stud[]);

void sortname(student stud[]);

void sortname2(student stud[]);

void sortcount(student stud[]);

void sortcount2(student stud[]);

void statistic(student stud[]);

void display1();

#endif

#include "stdioh"

int menu_select()

{

char c;

printf("\n\n");

printf(" | 1 增加学生记录 5统计信息 |\n");

printf(" | 2 查询学生记录 6打开文件 |\n");

printf(" | 3 修改学生记录 7保存文件 |\n");

printf(" | 4 学生纪录排序 8显示记录 |\n");

printf(" | 0退出系统 |\n");

printf("\n\n");

printf("请选择(0-8):");

c=getchar();

getchar();

return (c-'0');

}

#include "stdioh"

int findrecord(student stud[]) /查找信息/

{

char str[2];

int i,num;

if(numstus==0)

{

printf("没有可被查找的记录\n");

return -1;

}

else

{

printf("以何种方式查找?\n1学号\t2姓名\t3名次\n");

gets(str);

if(str[0]=='1') /按学号查找/

{

printf("请输入学号:");

gets(str);

for(i=0;i<=numstus;i++)

if(strcmp(str,stud[i]number)==0)

{

display(stud,i,i);

break;

}

else continue;

}

else if(str[0]=='2') /按姓名查找/

{

printf("请输入姓名:");

gets(str);

for(i=0;i<=numstus;i++)

if(strcmp(str,stud[i]name)==0)

{

display(stud,i,i);

break;

}

else continue;

}

else if(str[0]=='3') /按名次查找/

{

printf("请输入名次:");

scanf("%d",&num);

getchar();

for(i=0;i<=numstus;i++)

if(num==stud[i]index)

{

display(stud,i,i);

break;

}

else continue;

}

if(i>numstus)

{

printf("没有查找所要的信息。\n");

return -1;

}

return i;

}

}

#include"stdioh"

int openfile(student stu[])

{

int i=0,j;

FILE fp;

char filename[20],str[2];

if(numstus!=0)

{

printf("已经有记录存在,是否保存(y/n)");

gets(str);

if(str[0]=='y'||str[0]=='Y')

writetotext(stu);

}

printf("请输入文件名:");

gets(filename);

numstus=0;

if((fp=fopen(filename,"rb+"))==NULL)

{

printf("无法打开该文件\n");

return(-1);

}

fscanf(fp,"%d",&numstus);

fgetc(fp);

while(i<numstus)

{

fscanf(fp,"%s",stu[i]number);

fscanf(fp,"%s",stu[i]name);

fscanf(fp,"%s",stu[i]sex);

for(j=0;j<numsubs;j++)

fscanf(fp,"%f",&stu[i]subject[j]);

fscanf(fp,"%f",&stu[i]score);

fscanf(fp,"%f",&stu[i]average);

fscanf(fp,"%d",&stu[i]index);

i++;

}

fclose(fp);

printf("文件读取成功\n");

printf("是否显示纪录(y/n)");

gets(str);

if(str[0]=='y'||str[0]=='Y')

display(stu,0,numstus-1);

return(0);

}

#include "stdioh"

void sort(student stud[])

{

int i,j=0;

char str[5];

student p;

p=stud;

if(numstus==0)

{

printf("没有可供查询的记录!");

}

while(1)

{

for(i=0;;i++)

{

printf(" 请输入查询方式:");

printf("(直接输入回车则结束查询 *** 作)\n");

printf("1按照学号\t");

printf("2按照姓名\t");

printf("3按照名次\n");

gets(str);

if(strlen(str)==0) break;

if(str[0]=='1')

{

printf("请输入排序次序:\n");

printf("1升序排列\t");

printf("2降序排列\n");

gets(str);

if(str[0]=='1')

sortnum2(p);

else

sortnum(p);

display(stud,0,numstus-1);

}

else if(str[0]=='2')

{

printf("请输入排序次序:\n");

printf("1升序排列\t");

printf("2降序排列\n");

gets(str);

if(str[0]=='1')

sortname2(p);

else

sortname(p);

display(stud,0,numstus-1);

}

else if(str[0]=='3')

{

printf("请输入排序次序:\n");

printf("1升序排列\t");

printf("2降序排列\n");

gets(str);

if(str[0]=='1')

sortcount2(p);

else

sortcount(p);

display(stud,0,numstus-1);

}

else printf("请输入1~3");

printf("是否退出排序(y/n)");

gets(str);

if(str[0]=='y'||str[0]=='Y') break;

}

return;

}

}

void sortnum(student stud[])

{

int i,j;

student temp;

student p;

p=stud;

for(i=0;i<numstus;i++)

for(j=0;j<numstus-i-1;j++)

{

if(strcmp(stud[j+1]number,stud[j]number)>0)

{

temp=(p+j);

(p+j)=(p+j+1);

(p+j+1)=temp;

}

}

}

void sortnum2(student stud[])

{

int i,j;

student temp;

student p;

p=stud;

for(i=0;i<numstus;i++)

for(j=0;j<numstus-i-1;j++)

{

if(strcmp(stud[j]number,stud[j+1]number)>0)

{

temp=(p+j);

(p+j)=(p+j+1);

(p+j+1)=temp;

}

}

}

void sortname(student stud[])

{

int i,j;

student temp;

student p;

p=stud;

for(i=0;i<numstus;i++)

for(j=0;j<numstus-i-1;j++)

{

if(strcmp(stud[j+1]name,stud[j]name)>0)

{

temp=(p+j);

(p+j)=(p+j+1);

(p+j+1)=temp;

}

}

}

void sortname2(student stud[])

{

int i,j;

student temp;

student p;

p=stud;

for(i=0;i<numstus;i++)

for(j=0;j<numstus-i-1;j++)

{

if(strcmp(stud[j]name,stud[j+1]name)>0)

{

temp=(p+j);

(p+j)=(p+j+1);

(p+j+1)=temp;

}

}

}

void sortcount(student stud[])

{

int i,j;

student temp;

student p;

p=stud;

for(i=0;i<numstus;i++)

for(j=0;j<numstus-i-1;j++)

{

if(stud[j+1]index>stud[j]index)

{

temp=(p+j);

(p+j)=(p+j+1);

(p+j+1)=temp;

}

}

}

void sortcount2(student stud[])

{

int i,j;

student temp;

student p;

p=stud;

for(i=0;i<numstus;i++)

for(j=0;j<numstus-i-1;j++)

{

if(stud[j]index>stud[j+1]index)

{

temp=(p+j);

(p+j)=(p+j+1);

(p+j+1)=temp;

}

}

}

#include"stdioh"

void statistic(student stud[]) /新增功能,输出统计信息/

{

int i,j=0,k=0;

char c1,str[2];

float average[numsubs],sum=0;

if(numstus==0)

printf("没有可被查找的记录\n");

else

{

while(1)

{

printf("下面将统计考试成绩\n");

printf("请选择你要统计哪科的成绩 1A\t2B\t3C\t4D\t5E\n");

c1=getchar();

printf("\t一共有个%d记录\n",numstus); /总共记录数/

switch(c1)

{

case '1':

for(i=0;i<numstus;i++) /循环输入判断/

{

sum+=stud[i]subject[0];

if(stud[k]subject[0]>stud[i]subject[0]) k=i;

if(stud[j]subject[0]<stud[i]subject[0]) j=i;

}

average[0]=sum/numstus;

printf("\t科目A的最高分:\n"); /最高分/

printf("\t\t学号:%s 姓名:%s 分数:%2f\n",stud[j]number,stud[j]name,stud[j]subject[0]);

printf("\t科目A的最低分是:\n"); /最低分/

printf("\t\t学号:%s 姓名:%s 分数:%2f\n",stud[k]number,stud[k]name,stud[k]subject[0]);

printf("\t科目A的平均分是 %52f\n",average[0]); /平均分/

break;

case '2':

for(i=0;i<numstus;i++) /循环输入判断/

{

sum+=stud[i]subject[1];

if(stud[k]subject[1]>stud[i]subject[1]) k=i;

if(stud[j]subject[1]<stud[i]subject[1]) j=i;

}

average[1]=sum/numstus;

printf("\t科目B的最高分:\n"); /最高分/

printf("\t\t学号:%s 姓名:%s 分数:%2f\n",stud[j]number,stud[j]name,stud[j]subject[1]);

printf("\t科目B的最低分是:\n"); /最低分/

printf("\t\t学号:%s 姓名:%s 分数:%2f\n",stud[k]number,stud[k]name,stud[k]subject[1]);

printf("\t科目B的平均分是 %52f\n",average[1]); /平均分/

break;

case '3':

for(i=0;i<numstus;i++) /循环输入判断/

{

sum+=stud[i]subject[2];

if(stud[k]subject[2]>stud[i]subject[2]) k=i;

if(stud[j]subject[2]<stud[i]subject[2]) j=i;

}

average[2]=sum/numstus;

printf("\t科目C的最高分:\n"); /最高分/

printf("\t\t学号:%s 姓名:%s 分数:%2f\n",stud[j]number,stud[j]name,stud[j]subject[2]);

printf("\t科目C的最低分是:\n"); /最低分/

printf("\t\t学号:%s 姓名:%s 分数:%2f\n",stud[k]number,stud[k]name,stud[k]subject[2]);

printf("\t科目C的平均分是 %52f\n",average[2]); /平均分/

break;

case '4':

for(i=0;i<numstus;i++) /循环输入判断/

{

sum+=stud[i]subject[3];

if(stud[k]subject[3]>stud[i]subject[3]) k=i;

if(stud[j]subject[3]<stud[i]subject[3]) j=i;

}

average[3]=sum/numstus;

printf("\t科目D的最高分:\n"); /最高分/

printf("\t\t学号:%s 姓名:%s 分数:%2f\n",stud[j]number,stud[j]name,stud[j]subject[3]);

printf("\t科目D的最低分是:\n"); /最低分/

printf("\t\t学号:%s 姓名:%s 分数:%2f\n",stud[k]number,stud[k]name,stud[k]subject[3]);

printf("\t科目D的平均分是 %52f\n",average[3]); /平均分/

break;

case '5':

for(i=0;i<numstus;i++) /循环输入判断/

{

sum+=stud[i]subject[4];

if(stud[k]subject[4]>stud[i]subject[4]) k=i;

if(stud[j]subject[4]<stud[i]subject[4]) j=i;

}

average[4]=sum/numstus;

printf("\t科目E的最高分:\n"); /最高分/

printf("\t\t学号:%s 姓名:%s 分数:%2f\n",stud[j]number,stud[j]name,stud[j]subject[4]);

printf("\t科目E的最低分是:\n"); /最低分/

printf("\t\t学号:%s 姓名:%s 分数:%2f\n",stud[k]number,stud[k]name,stud[k]subject[4]);

printf("\t科目E的平均分是 %52f\n",average[4]); /平均分/

break;

default:printf("输入错误!请输入1~5之间的数\n");

}

sum=0;

getchar();

printf("是否继续进行统计(y/n)");

gets(str);

if(str[0]=='y'||str[0]=='Y') ;

else break;

}

}

}

#include"stdioh"

int writetotext(student stud[]) /将所有记录写入文件/

{

int i=0,j;

FILE fp;

char filename[20];

printf("输入文件名称:");

gets(filename);

fp=fopen(filename,"w");

fprintf(fp,"%d\n",numstus);

while(i<numstus)

{

fprintf(fp,"%s %s %s ",stud[i]number,stud[i]name,stud[i]sex);

for(j=0;j<numsubs;j++)

fprintf(fp,"%f ",stud[i]subject[j]);

fprintf(fp,"%f %f %d ",stud[i]score,stud[i]average,stud[i]index);

i++;

}

fclose(fp);

printf("已成功存储!\n");

display(stud,0,numstus-1);

numstus=0;

return 0;

}

#include"stdioh"

void welcome()

{

printf("\t\n");

printf("\t\t\t\t欢迎进入学生成绩管理系统\t\t\t\t\t\t\t\t 晓 欢迎使用!\n");

printf("\t\n");

printf("\t\t\t\t\t\t本系统由“晓”一组亲情制作\n\n");

printf("\t\t\t\t\t\t制作人员列表: \n");

printf("\t\t\t\t\t\t吴彦兵 黄进 汪红波\n\t\t\t\t\t\t刘玉萧 杨超 章耀\n");

printf("输入回车进入菜单栏:\n");

printf("\n\n");

getchar();

}

void showtable()

{

printf("-------------------------------------------------------------------------------\n");

printf("学号\t姓名\t性别\tA\tB\tC\tD\tE 总分 平均分 名次\n");

printf("-------------------------------------------------------------------------------\n");

}

void display(student stud[],int n1,int n2)

{

int i;

showtable(); /显示表头/

for(i=n1;i<=n2;i++)

printf("%s\t%s\t%s\t%1f\t%1f\t%1f\t%1f\t%1f %1f %1f %d\t\n",stud[i]number,stud[i]name,stud[i]sex,stud[i]subject[0],stud[i]subject[1],stud[i]subject[2],stud[i]subject[3],stud[i]subject[4],stud[i]score,stud[i]average,stud[i]index);

/通过循环输出数据/

}

void display1()

{

printf("\t\t本系统由晓一组亲情制作\n\n");

printf("\t\t制作人员列表: \n");

printf("\t\t\t\t\t\t吴彦兵 黄进 汪红波\n\t\t\t\t\t\t刘玉萧 杨超 章耀\n");

printf("\t\t\t=========欢迎下次使用=========");

printf("\n\n");

getchar();

}

#include"stdioh"

#include<stringh>

void amendrecord(student stud[])

{

char str[5]; /供用户输入/

int i=-1,j;

if(numstus==0) /没有记录返回/

printf("没有可供修改的记录!");

while(i<0)

{

i=findrecord(stud);

if(i>=0)

{

printf("要删除这个学生的信息吗(y/n)");

gets(str);

if(str[0]=='y'||str[0]=='Y')

{

deleterecord(stud,i);

count(stud);

}

else

{

printf("确定要修改这个学生的信息吗(y/n)");

gets(str);

if(str[0]=='y'||str[0]=='Y')

{

printf("下面请重新输入学生的信息:\n");

printf("请输入学号:");

gets(stud[i]number);

printf("请输入姓名:");

gets(stud[i]name);

printf("请输入性别(男/女 1/0):");

gets(str);

if(str[0]=='0')

strcpy(stud[i]sex,"女");

else

strcpy(stud[i]sex,"男");

stud[i]score=0;

printf("请按顺序输入成绩:");

for(j=0;j<numsubs;j++)

{

scanf("%f",&stud[i]subject[j]);

stud[i]score+=stud[i]subject[j];

}

getchar();

stud[i]average=stud[i]score/numsubs;

}

count(stud);

}

display(stud,0,numstus-1);

}

printf("是否继续进行其他修改(y/n)\n");

gets(str);

if(str[0]=='y'||str[0]=='Y')

i=-1;

else i=1;

}

}

void deleterecord(student stu[],int i) /删除信息/

{

int j;

while(i>=0)

{

for(j=i;j<numstus;j++)

stu[j]=stu[j+1];

numstus--;

printf("删除成功!\n");

}

}

void count(student stud[])

{

int i,j;

for(i=0;i<numstus;i++)

{

stud[i]index=1;

for(j=0;j<numstus;j++)

if(stud[j]score>stud[i]score)

stud[i]index++;

}

}

#include "stdioh"

void addrecord(student stud[])

{

int i=0,j,num;

char str[5];

if(numstus!=0)

{

printf("已有记录存在是否覆盖(y/n)\n");

gets(str);

if(str[0]=='Y'||str[0]=='y')

i=0;

else i=numstus;

}

printf("请输入增加的学生信息条目数:");

scanf("%d",&num);

if(i==0)

numstus=num;

else numstus+=num;

if(numstus>lens)

{

lens+=50;

pointer=(student )realloc(pointer,lensLEN);

}

printf("请输入学生信息:\n");

for(;i<numstus;i++)

{

getchar();

printf("请输入学号:");

gets(pointer[i]number);

printf("请输入姓名:");

gets(pointer[i]name);

printf("请输入性别(男/女 1/0):");

gets(pointer[i]sex);

if(pointer[i]sex[0]=='0') strcpy(pointer[i]sex,"女");

else strcpy(pointer[i]sex,"男");

printf("请输入各科成绩:(按ABCDE的顺序):");

stud[i]score=0;

for(j=0;j<numsubs;j++)

{

scanf("%f",&stud[i]subject[j]); /计算总分/

stud[i]score+=stud[i]subject[j];

}

stud[i]average=stud[i]score/numsubs; /计算平均分/

}

count(stud); /附名次/

display(stud,0,numstus-1);

getchar();

}

#include "stdioh"

int numstus;

int lens;

student pointer;

void main()

{

int i=1;

char str[2];

lens=100;

pointer=(student )malloc(lensLEN); /分配内存/

numstus=0;

welcome(); /欢迎界面/

while(i>0)

{

i=menu_select(); /控制菜单/

switch(i)

{

case 1:addrecord(pointer);break; /增加学生信息/

case 2:findrecord(pointer);break; /查询学生信息/

case 3:amendrecord(pointer);break; /修改学生信息/

case 4:sort(pointer);break; /学生信息排序/

case 5:statistic(pointer);break; /统计信息/

case 6:openfile(pointer);break; /打开文件/

case 7:writetotext(pointer);break; /保存文件/

case 8:display(pointer,0,numstus-1);break; /显示记录/

case 0:

if(numstus!=0) printf("是否保存当前记录(y/n)");

gets(str);

if(str[0]=='y'||str[0]=='Y')

writetotext(pointer);

i=-1;break; /退出系统/

default:printf("请输入数字0~8:\n");i=1; /输入错误/

}

}

printf("\t\t======欢迎再次使用本系统======= \n");

display1();

}

我大一时写了个,贴上来给你。

/

创建日期:2011-04-27

程序名称:链表综合 *** 作(学生成绩管理系统)

程序作者:木芽锺

备注信息:

/

#include <stdioh>

#include <stringh>

#include <stdlibh>

#define SN 3 //课程门数,可以自定义

typedef struct student

{

char num[10],

name[10];

float score[SN],

sum,

avg;

struct student next;

}STU;

/输入链表单元内容/

void input(STU p)

{

int i;

printf("please input number:\n");

scanf("%s",p->num);

printf("please input name:\n");

scanf("%s",p->name);

printf("please input %d scores:\n",SN);

p->sum=0;

for(i=0;i<SN;i++)

{

scanf("%f",&p->score[i]);

p->sum+=p->score[i];

}

p->avg=p->sum/SN;

}

/创建一个链表单元/

STU creat_node()

{

STU p;

p=(STU )malloc(sizeof(STU));

if(p == NULL)

{ printf("No enough memory !");

exit(0);

}

input(p);

p->next=NULL;

return p;

}

/创建一个链表/

STU creat_list()

{

STU head=NULL,tail=NULL,p;

char str[4];

printf("List creating\n");

do

{

printf("Do you want to continue (yes/no) :");

scanf("%s",str);

if(strcmp(str,"yes")==0)

{

p=creat_node();

if(head==NULL){head=tail=p;continue;}

tail->next=p;

tail=p;

}

if(strcmp(str,"yes")!=0&&strcmp(str,"no")!=0)

{

printf("You must input 'yes' or 'no'\n");

//getchar();

continue;

}

if(strcmp(str,"no")==0)break;

//getchar();

}while(1);

printf("List create end\n\n");

return head;

}

/输出一个链表单元/

void print_a_node(STU fin)

{

int i;

printf("%s;\t%s;\t%02f;\t%02f\t",fin->num,fin->name,fin->avg,fin->sum);

for(i=0;i<SN;i++)

printf("%02f\t",fin->score[i]);

putchar(10);

}

/输出一个链表头部/

void print_a_head()

{

int i;

printf("number\tname\tavg\tsum\t");

for(i=0;i<SN;i++)

printf("score%d\t",i+1);

putchar(10);

}

/输出 *** 作菜单/

void print_menu_list()

{

printf("======the operation menu list======\n");

printf("[0]-->exit\n[1]-->creat a list\n[2]-->print the list\n[3]-->insert a list node\n[4]-->select by number\n[5]-->select by name\n");

printf("[6]-->delete a list node\n[7]-->update a list node\n[8]-->order the list by score\n[9]-->print the operation menu list\n");

printf("======the operation menu list======\n");

putchar(10);

}

/输出链表/

int print_list(STU stu)

{

STU p=stu;

if(stu==NULL)

{

printf("no records!!!\n");

return (0);

}

print_a_head();

while(p!=NULL)

{

print_a_node(p);

p=p->next;

}

putchar(10);

return (0);

}

/插入链表单元/

void insert(STU stu)

{

STU tail=stu,p;

printf("now insert a list node\n");

while(tail->next!=NULL)

{

tail=tail->next;

}

p=creat_node();

tail->next=p;

printf("Insert end\n\n");

}

/查找链表num/

STU find_num(STU stu, char num[])

{

STU p=stu,pr=NULL;

while(p!=NULL)

{

if(strcmp(p->num,num)==0){pr=p;break;}

p=p->next;

}

return pr;

}

/查找链表name/

STU find_name(STU stu, char name[])

{

STU p=stu,pr=NULL;

while(p!=NULL)

{

if(strcmp(p->name,name)==0){pr=p;break;}

p=p->next;

}

return pr;

}

/删除链表单元/

STU delet(STU stu, char name[])

{

STU p=stu,front=stu;

if((p=find_name(stu,name))!=NULL)

{

printf("the delete record:\n");

print_a_head();

print_a_node(p);

}

else

{

printf("can not find the student!\n");

return stu;

}

p=stu;

while(p!=NULL&&strcmp(p->name,name)!=0)

{

front=p;

p=p->next;

}

if(p==stu&&front==stu)stu=NULL;

else front->next=p->next;

if(p!=NULL)p->next=NULL;

free(p);

printf("delete end\n\n");

return stu;

}

/更新链表单元/

void update(STU stu, char name[])

{

STU fin;

if((fin=find_name(stu,name))!=NULL)

{

printf("before update:\n");

print_a_head();

print_a_node(fin);

}

else

{

printf("can not find the student!\n");

exit(0);

}

printf("please input the new records now\n");

input(fin);

printf("update end\n\n");

}

/链表单元排序/

void order(STU stu)

{

STU pi,pj,max,temp;

int i;

if(stu!=NULL&&stu->next!=NULL)

{

for(pi=stu;pi!=NULL;pi=pi->next)

{

max=pi;

for(pj=pi->next;pj!=NULL;pj=pj->next)

{

if(max->sum<pj->sum)

max=pj;

}

if(max!=pi)

{

strcpy(tempnum,max->num);

strcpy(max->num,pi->num);

strcpy(pi->num,tempnum);

strcpy(tempname,max->name);

strcpy(max->name,pi->name);

strcpy(pi->name,tempname);

tempsum=pi->sum;

pi->sum=max->sum;

max->sum=tempsum;

tempavg=max->avg;

max->avg=pi->avg;

pi->avg=tempavg;

for(i=0;i<SN;i++)

{

tempscore[i]=max->score[i];

max->score[i]=pi->score[i];

pi->score[i]=tempscore[i];

}

}

}

printf("order end\n\n");

}

else

printf("do not need to order\n\n");

}

/释放链表/

void fre(STU stu)

{

STU p=stu,pf;

if(stu==NULL)

{

printf("the list is NULL!\n");

exit(0);

}

while(p!=NULL)

{

pf=p->next;

free(p);

p=pf;

}

if(stu==NULL)

printf("free the list\n");

}

STU menu(STU stu,int cas)

{

STU fin=NULL;

char a[10];

switch(cas)

{

//创建链表

case 1:

if(stu!=NULL)fre(stu);

stu=creat_list();

break;

//输出链表

case 2:

if(stu==NULL){printf("can not do this operation!\n");putchar(10);break;}

print_list(stu);

break;

//插入链表单元

case 3:

if(stu==NULL){printf("can not do this operation!\n");putchar(10);break;}

insert(stu);

break;

//查找输出number

case 4:

if(stu==NULL){printf("can not do this operation!\n");putchar(10);break;}

printf("please input the 'number' you want to find:\n");

scanf("%s",a);

if((fin=find_num(stu,a))!=NULL)

{

print_a_head();

print_a_node(fin);

}

else printf("no found!\n");

break;

//查找输出name

case 5:

if(stu==NULL){printf("can not do this operation!\n");putchar(10);break;}

printf("please input the 'name' you want to find:\n");

scanf("%s",a);

if((fin=find_name(stu,a))!=NULL)

{

print_a_head();

print_a_node(fin);

putchar(10);

}

else printf("no found!\n");

break;

//删除链表单元

case 6:

if(stu==NULL){printf("can not do this operation!\n");putchar(10);break;}

printf("please input the 'name' you want to delete:\n");

scanf("%s",a);

stu=delet(stu,a);

break;

//更新链表单元

case 7:

if(stu==NULL){printf("can not do this operation!\n");putchar(10);break;}

printf("please input the 'name' you want to update:\n");

scanf("%s",a);

update(stu,a);

break;

//链表单元排序

case 8:

if(stu==NULL){printf("can not do this operation!\n");putchar(10);break;}

printf("order by score\n");

order(stu);

break;

//打印链表 *** 作菜单

case 9:

print_menu_list();

break;

default:

printf("can not do this operation!\n");putchar(10);break;

}

return stu;

}

void main()

{

STU stu=NULL;

int cas;

//打印 *** 作提示

print_menu_list();

//用户 *** 作

do

{

printf("press 0~9 to choose operation!\n");

scanf("%d",&cas);

if(cas<0||cas>9){printf("you must press 0 to 9 !\n");continue;}

if(cas!=0)stu=menu(stu,cas);

if(cas==0){printf("operation end !\n\n");fre(stu);}

}while(cas!=0);

//释放链表

fre(stu);

}

学生成绩管理系统代码

#include<stdioh>

#include<malloch>

#include<stringh>

typedef struct Student

{

int no;

char name[10];

float score[3]; //three scores

float average; //average score

struct Student next;

}Student;

void Initial(Student p)

{

p=(Student)malloc(sizeof(Student));//the head of the linklist

p->next=NULL;

}

void Input(Student p)

{

Student stu=(Student)malloc(sizeof(Student));

printf("学号:"); scanf("%d",&stu->no);

printf("姓名:"); scanf("%s",stu->name);

printf("成绩1:"); scanf("%f",&stu->score[0]);

printf("成绩2:"); scanf("%f",&stu->score[1]);

printf("成绩3:"); scanf("%f",&stu->score[2]);

stu->average=(stu->score[0]+stu->score[1]+stu->score[2])/3;

stu->next=NULL;

Student ps=(Student)malloc(sizeof(Student));

ps=p;

while(ps->next)

ps=ps->next;

ps->next=stu;

//free(ps);

}

void Output(Student p)

{

Student ps=(Student)malloc(sizeof(Student));

ps=p->next;

printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均分\n");

while(ps!=NULL)

{

printf("%d\t",ps->no);

printf("%s\t",ps->name);

printf("%1f\t",ps->score[0]);

printf("%1f\t",ps->score[1]);

printf("%1f\t",ps->score[2]);

printf("%1f\t\n",ps->average);

ps=ps->next;

}

free(ps);

}

void Find(Student p)

{

Student ps=(Student)malloc(sizeof(Student));

ps=p->next;

char name[10];

printf("输入要查询的学生姓名:");

scanf("%s",name);

while(strcmp(ps->name,name)!=0) //相同时为0

ps=ps->next;

printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均分\n");

printf("%d\t",ps->no);

printf("%s\t",ps->name);

printf("%1f\t",ps->score[0]);

printf("%1f\t",ps->score[1]);

printf("%1f\t",ps->score[2]);

printf("%1f\t\n",ps->average);

}

void swap(Student p1, Student p2) //swap two nodes for sorting

{

Student temp=(Student)malloc(sizeof(Student));

temp->no=p1->no;

strcpy(temp->name,p1->name);

temp->score[0]=p1->score[0];

temp->score[1]=p1->score[1];

temp->score[2]=p1->score[2];

temp->average=p1->average;

p1->no=p2->no;

strcpy(p1->name,p2->name);

p1->score[0]=p2->score[0];

p1->score[1]=p2->score[1];

p1->score[2]=p2->score[2];

p1->average=p2->average;

p2->no=temp->no;

strcpy(p2->name,temp->name);

p2->score[0]=temp->score[0];

p2->score[1]=temp->score[1];

p2->score[2]=temp->score[2];

p2->average=temp->average;

free(temp);

}

void Sort(Student p) //sort by average

{

Student p1=(Student)malloc(sizeof(Student));

Student p2=(Student)malloc(sizeof(Student));

p1=p->next;

while(p1)

{

float avg=p1->average;

p2=p1->next;

while(p2)

{

if( avg< (p2->average))

{

swap(p1,p2);

avg=p2->average;

}

p2=p2->next;

}

p1=p1->next;

}

}

void Insert(Student p)

{

printf("按平均分高低插入数据!\n");

Student stu=(Student)malloc(sizeof(Student));//the data being inserted

printf("学号:"); scanf("%d",&stu->no);

printf("姓名:"); scanf("%s",stu->name);

printf("成绩1:"); scanf("%f",&stu->score[0]);

printf("成绩2:"); scanf("%f",&stu->score[1]);

printf("成绩3:"); scanf("%f",&stu->score[2]);

stu->average=(stu->score[0]+stu->score[1]+stu->score[2])/3;

stu->next=NULL;

Student p1=(Student)malloc(sizeof(Student));//temp

p1=p;

while(p1->next && ((p1->next)->average) >(stu->average))

p1=p1->next;

//p1=p1->next;

stu->next=p1->next;

p1->next=stu;

}

void Menu(Student p)

{

int select;

printf("您好,欢迎使用学生成绩管理系统!\n");

printf("1:输入学生成绩数据\n2:输出全部学生信息\n3:按姓名查找学生记录\n4:按平均成绩进行排序\n5:按平均成绩高低插入数据\n6:退出\n");

scanf("%d",&select);

while(select<=6 && select>0)

{

switch(select)

{

case 1: Input(p);break;

case 2: Output(p);break;

case 3: Find(p); break;

case 4: Sort(p); break;

case 5: Insert(p); break;

case 6: printf("成功退出,欢迎再次使用!\n"); return ; break;

}

printf("1:输入学生成绩数据\n2:输出全部学生信息\n3:按姓名查找学生记录\n4:按平均成绩进行排序\n5:按平均成绩高低插入数据\n6:退出\n");

scanf("%d",&select);

}

}

int main()

{

Student head=(Student)malloc(sizeof(Student));

Menu(head);

}

以上就是关于C语言程序设计学生成绩管理系统全部的内容,包括:C语言程序设计学生成绩管理系统、C语言编程:学生成绩管理系统、怎样用c语言编写一个学生成绩管理系统等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9404911.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存