学生成绩管理系统(数据结构C语言版源代码)

学生成绩管理系统(数据结构C语言版源代码)


2024年4月30日发(作者:)

学生成绩管理系统(数据结

构C语言版源代码)

-标准化文件发布号:(9556-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

#include

#include

#include

struct students{

char Num[10]; /*字符型学生学号*/

char Name[20]; /*字符型学生姓名*/

char Sex[3]; /*字符型学生性别*/

double English; /*双精度实型英语成绩*/

double Java; /*双精度实型Java成绩*/

double Sjjg; /*双精度实数据结构*/

double Szdl; /*双精度实型数字电路*/

double Jsj; /*计算机组成原理*/

struct students *next; /*用与构建连表指向下一结点*/

};

FILE *fp; /*定义全局变量fp*/

void Revisemenu();/*修改菜单*/

void Sortmenu();/*排序菜单*/

void menu();/*主菜单*/

void secret();/*安全验证*/

struct students * Input();/*新建学生信息*/

void fprint(struct students *head);/*将信息导入文件可追加*/

void fprint_(struct students *head);/*将信息导入文件并覆盖*/

void Browse(struct students *head);/*浏览全部学生信息*/

struct students * create(struct students *head,int *n);/*从tushu_list中读取数据构

建链表*/

void FindofNum(struct students *head);/*按学号查询学生信息*/

void FindofNname(struct students *head);/*按姓名查询学生信息*/

void SortEnglish(struct students * head);/*按英语成绩排序*/

void SortJava(struct students * head);/*按Java成绩排序*/

void SortSjjg(struct students * head);/*按数据结构成绩排序*/

void SortSzdl(struct students * head);/*按数字逻辑电路成绩排序*/

void SortJsj(struct students * head);/*按计算机组成原理成绩排序*/

struct students * Delete(struct students * head,char m[15]);/*按学号删除学生成绩

信息*/

struct students * Revise();/*修改学生信息(按编号修改)*/

/*主菜单*/

void menu()

{

printf("nn");

printf("***************************************************n");

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

2

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

printf(" 1-添加新同学 2-浏览学生信息 n");

printf(" 3-按学号查询 4-按姓名查询 n");

printf(" 5-按成绩排序 6-修改学生信息 n");

printf(" 7-删除学生信息 0-退出系统 n");

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

printf("___________________________________________________n");

}

/*排序菜单*/

void Sortmenu()

{

printf("nn");

printf("***************************************************n");

printf(" 按成绩排序 n");

printf(" 1-大学英语 2-JAVA编程 n");

printf(" 3-数据结构 4-数字逻辑电路 n");

printf(" 5-计算机组成原理 0-返回上级菜单 n");

printf("***************************************************n");

}

/*修改菜单*/

void Revisemenu()

{

printf("n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n");

printf(" 1--修改学生姓名 2--修改学生学号 n");

printf(" 3--修改学生性别 4--修改英语成绩 n");

printf(" 5--修改JAVA成绩 6--修改数据结构 n");

printf(" 7--修改数字电路 8--修改计算计 n");

printf(" 0--返回上级菜单 n");

printf("n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n");

}

/*安全验证*/

void secret()

{

char a[20];

printf("**欢迎来到学生信息管理系统,进入系统前请先进行密码验证---");

printf(" ");

do{

gets(a); /*输入密码*/

system("cls"); /*调用库函数清屏*/

printf("对不起!您输入的密码有误,请重新输入---");

}while(strcmp(a,"0605")!=0); /*单一密码"0605"*/

3

system("cls");

}

/*新建学生信息*/

struct students * Input()

{

struct students *p1,*p2,*head; /*建立辅助结点及头结点*/

char Name;

int n=0,x;

printf("n请按对应项输入学生信息以#结束:n");

printf("姓名 学号 性别 英语 Java 数据结构 数字电路 计算机组成原理

n");

p1=(struct students *)malloc(sizeof(struct students));

head=p2=p1;

do{ /*使用do while语句输入学生信息*/

scanf("%s",&p1->Name);

if(strcmp(p1->Name,"#")==0)break; /*判断结束符*/

else

scanf("%s%s%lf%lf%lf%lf%lf",

p1->Num,p1->Sex,&p1->English,&p1->Java,&p1->Sjjg,&p1->Szdl,&p1-

>Jsj);

Name='#';

p1=(struct students *)malloc(sizeof(struct students));

p2->next=p1;

p2=p1;

n++;

}while(1);

p1->next=NULL;

printf("学生信息输入结束!n");

getchar();

printf("是否保存学生信息(1.是/2.否):");

scanf("%d",&x);

if(x==1)

fprint(head); /*调用函数保存至文件*/

else

printf("n文件没有被保存!n");

return head; /*返回头指针*/

}

/*将信息导入文件可追加*/

void fprint(struct students *head)

{

struct students *p1;

if((fp=fopen("students_","a"))==NULL)

4

{

printf("File open error!n");

exit(0);

}

for(p1=head;p1->next!=NULL;p1=p1->next) /*遍历*/

fprintf(fp,"%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn",

p1->Name,p1->Num,p1->Sex,p1->English,p1->Java,p1->Sjjg,p1->Szdl,p1-

>Jsj);/*将学生信息写入文件*/

fclose(fp); /*关闭文件*/

printf("n学生信息已成功保存到文件 students_ 中!n");

getchar();

}

/*将信息导入文件并覆盖*/

void fprint_(struct students *head)

{

struct students *p1;

if((fp=fopen("students_","w"))==NULL)

{

printf("File open error!n");

exit(0);

}

for(p1=head;p1!=NULL;p1=p1->next) /*遍历*/

fprintf(fp,"%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn",

p1->Name,p1->Num,p1->Sex,p1->English,p1->Java,p1->Sjjg,p1->Szdl,p1-

>Jsj);/*将学生信息写入文件*/

fclose(fp); /*关闭文件*/;

getchar();

}

/*浏览全部学生信息*/

void Browse(struct students *head)

{

char Num[10]; /*字符型学生学号*/

char Name[20]; /*字符型学生姓名*/

char Sex[3]; /*字符型学生性别*/

double English; /*双精度实型英语成绩*/

double Java; /*双精度实型Java成绩*/

double Sjjg; /*双精度实数据结构*/

double Szdl; /*双精度实型数字电路*/

double Jsj; /*计算机组成原理*/

if((fp=fopen("students_","a+"))==NULL)

{

printf("File open error!n");

5

exit(0);

}

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

printf("姓名 学号 性别 英语 Java 数据结构 数字电路 计算机n");

while(!feof(fp))/*读取并输出*/{

fscanf(fp,"%s%s%s%lf%lf%lf%lf%lf",Name,Num,Sex,&English,&Java,&Sjjg,&Sz

dl,&Jsj);

printf("%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn",

Name,Num,Sex,English,Java,Sjjg,Szdl,Jsj);

};

if(fclose(fp))

{

printf("Can not close the file!n");

exit(0);

}

}

/*从tushu_list中读取数据构建链表*/

struct students * create(struct students * head,int *n)

{

FILE *fp;

struct students*p,*p1,*p2;

if((fp=fopen("students_","a+"))==NULL)

{

printf("File open error!n");

exit(0);

}

while(!feof(fp))

{

(*n)++;

p=(struct students *)malloc(sizeof(struct students));

fscanf(fp,"%s%s%s%lf%lf%lf%lf%lf",

p->Name,p->Num,p->Sex,&p->English,&p->Java,&p->Sjjg,&p-

>Szdl,&p->Jsj);

if(head==NULL)

{

head=p;

p1=p;

}

else

{

p1->next=p;

p2=p1;

6

p1=p;

}

}

p2->next=NULL;

free(p);

(*n)--;

fclose(fp);

return head;

}

/*按姓名查询学生信息*/

void FindofName(struct students *head)

{

int i=0,n=0;

char b[20];

struct students *p;

head=create(head,&n);

p=head;

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

scanf("%s",b);

while(p!=NULL){

if(strcmp(p->Name,b)==0){

printf("姓名 学号 性别 英语 Java 数据结构 数字电路

计算机n");

printf("%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn",

p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p-

>Szdl,p->Jsj);

i++;

}

p=p->next;

}

if(i==0)

printf("n对不起!没有找到名为“%s”的学生信息!n",b);

}

/*按学号查询学生信息*/

void FindofNum(struct students *head)

{

int i=0,n;

char b[20];

struct students *p;

head=create(head,&n);

p=head;

printf("n请输入要查询的学生学号:");

7

scanf("%s",b);

while(p!=NULL){

if(strcmp(p->Num,b)==0){

printf("姓名 学号 性别 英语 Java 数据结构 数字电路

计算机n");

printf("%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn",

p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p-

>Szdl,p->Jsj);

i++;

}

p=p->next;

}

if(i==0)

printf("n对不起!没有找到学号为“%s”学生信息!n",b);

}

/*按英语成绩排序*/

void SortEnglish(struct students * head)

{

struct students *p,*tail; /*定义中间变量*/

int n;

double English;

p=(struct students *)malloc(sizeof(struct students));

head=create(head,&n);

printf("姓名 学号 性别 英语 Java 数据结构 数字电路 计算机n");

while(head->next!=NULL) /*利用选择法排序*/

{

tail=NULL;

p=head;

English=p->English; /*将链表中第一个成绩赋给English*/

while(p!=NULL)

{

if((p->English)>English)/*比较*/

English=p->English;

tail=p;

p=p->next;

}

tail=NULL;

p=head;

while(p->next!=NULL)

{

if(p->English==English){

printf("%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn",

8

p->Name,p->Num,p->Sex,p->English,p->Java,p-

>Sjjg,p->Szdl,p->Jsj);

if(p==head)

head=head->next;

else

tail->next=p->next;

}

tail=p;

p=p->next;

}

if(p->English==English){ /*分数相同时无需比较*/

printf("%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn",

p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p-

>Szdl,p->Jsj);

tail->next=NULL;

}

}

p=head; /*将链表赋给结构体指针*/

printf("%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn",

p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);/*

浏览排序后的信息*/

printf("按英语成绩排序后输出如上(注:此过程不保存至文件):n");

return;

}

/*按JAVA成绩排序*/

void SortJava(struct students * head)

{

struct students *p,*tail; /*定义中间变量*/

int n;

double Java;

p=(struct students *)malloc(sizeof(struct students));

head=create(head,&n);

printf("姓名 学号 性别 英语 Java 数据结构 数字电路 计算机n");

while(head->next!=NULL) /*利用选择法排序*/

{

tail=NULL;

p=head;

Java=p->Java; /*将链表中第一个成绩赋给Java*/

while(p!=NULL)

{

if((p->Java)>Java)/*比较*/

Java=p->Java;

tail=p;

9

p=p->next;

}

tail=NULL;

p=head;

while(p->next!=NULL)

{

if(p->Java==Java){

printf("%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn",

p->Name,p->Num,p->Sex,p->English,p->Java,p-

>Sjjg,p->Szdl,p->Jsj);

if(p==head)

head=head->next;

else

tail->next=p->next;

}

tail=p;

p=p->next;

}

if(p->Java==Java){ /*成绩相同时无需比较*/

printf("%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn",

p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p-

>Szdl,p->Jsj);

tail->next=NULL;

}

}

p=head; /*将链表赋给结构体指针*/

printf("%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn",

p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);/*

浏览排序后的信息*/

printf("按Java成绩排序后输出如上(注:此过程不保存至文件):n");

return;

}

/*按数据结构排序*/

void SortSjjg(struct students * head)

{

struct students *p,*tail; /*定义中间变量*/

int n;

double Sjjg;

p=(struct students *)malloc(sizeof(struct students));

head=create(head,&n);

printf("姓名 学号 性别 英语 Java 数据结构 数字电路 计算机n");

while(head->next!=NULL) /*利用选择法排序*/

10

{

tail=NULL;

p=head;

Sjjg=p->Sjjg; /*将链表中第一个成绩赋给Sjjg*/

while(p!=NULL)

{

if((p->Sjjg)>Sjjg)/*比较*/

Sjjg=p->Sjjg;

tail=p;

p=p->next;

}

tail=NULL;

p=head;

while(p->next!=NULL)

{

if(p->Sjjg==Sjjg){

printf("%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn",

p->Name,p->Num,p->Sex,p->English,p->Java,p-

>Sjjg,p->Szdl,p->Jsj);

if(p==head)

head=head->next;

else

tail->next=p->next;

}

tail=p;

p=p->next;

}

if(p->Sjjg==Sjjg){ /*成绩相同时无需比较*/

printf("%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn",

p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p-

>Szdl,p->Jsj);

tail->next=NULL;

}

}

p=head; /*将链表赋给结构体指针*/

printf("%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn",

p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);/*

浏览排序后的信息*/

printf("按数据结构成绩排序后输出如上(注:此过程不保存至文件):

n");

return;

}

11

/*按数字电路排序*/

void SortSzdl(struct students * head)

{

struct students *p,*tail; /*定义中间变量*/

int n;

double Szdl;

p=(struct students *)malloc(sizeof(struct students));

head=create(head,&n);

printf("姓名 学号 性别 英语 Java 数据结构 数字电路 计算机n");

while(head->next!=NULL) /*利用选择法排序*/

{

tail=NULL;

p=head;

Szdl=p->Szdl; /*将链表中第一个成绩赋给Szdl*/

while(p!=NULL)

{

if((p->Szdl)>Szdl)/*比较*/

Szdl=p->Szdl;

tail=p;

p=p->next;

}

tail=NULL;

p=head;

while(p->next!=NULL)

{

if(p->Szdl==Szdl){

printf("%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn",

p->Name,p->Num,p->Sex,p->English,p->Java,p-

>Sjjg,p->Szdl,p->Jsj);

if(p==head)

head=head->next;

else

tail->next=p->next;

}

tail=p;

p=p->next;

}

if(p->Szdl==Szdl){ /*成绩相同时无需比较*/

printf("%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn",

p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p-

>Szdl,p->Jsj);

tail->next=NULL;

}

12

}

p=head; /*将链表赋给结构体指针*/

printf("%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn",

p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);/*

浏览排序后的信息*/

printf("按数字电路成绩排序后输出如上(注:此过程不保存至文件):

n");

return;

}

/*按计算机组成原理排序*/

void SortJsj(struct students * head)

{

struct students *p,*tail; /*定义中间变量*/

int n;

double Jsj;

p=(struct students *)malloc(sizeof(struct students));

head=create(head,&n);

printf("姓名 学号 性别 英语 Java 数据结构 数字电路 计算机n");

while(head->next!=NULL) /*利用选择法排序*/

{

tail=NULL;

p=head;

Jsj=p->Jsj; /*将链表中第一个成绩赋给Jsj*/

while(p!=NULL)

{

if((p->Jsj)>Jsj)/*比较*/

Jsj=p->Jsj;

tail=p;

p=p->next;

}

tail=NULL;

p=head;

while(p->next!=NULL)

{

if(p->Jsj==Jsj){

printf("%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn",

p->Name,p->Num,p->Sex,p->English,p->Java,p-

>Sjjg,p->Szdl,p->Jsj);

if(p==head)

head=head->next;

else

tail->next=p->next;

13

}

tail=p;

p=p->next;

}

if(p->Jsj==Jsj){ /*成绩相同时无需比较*/

printf("%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn",

p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p-

>Szdl,p->Jsj);

tail->next=NULL;

}

}

p=head; /*将链表赋给结构体指针*/

printf("%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn",

p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);/*

浏览排序后的信息*/

printf("按计算机组成原理成绩排序后输出如上(注:此过程不保存至文

件):n");

return;

}

/*按学号删除学生成绩信息*/

struct students * Delete(struct students * head,char m[15])

{

struct students *ptr1,*ptr2;

int n;

printf("n所有学生信息如下:n");

Browse(head);

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

scanf("%s",m);

head=create(head,&n);

if(head==NULL){

printf("无学生信息!n");

return head;

}

if((strcmp(head->Num,m)==0)&&head!=NULL)

{

ptr2=head;

head=head->next;

free(ptr2);

}

if(strcmp(head->Num,m)!=0){

ptr1=head;

ptr2=head->next;

while(ptr2!=NULL){

14

if(strcmp(ptr2->Num,m)==0){

ptr1->next=ptr2->next;

free(ptr2);

}

else

ptr1=ptr2;

ptr2=ptr1->next;

}

}

fprint_(head);

printf("n学号为' %s '学生信息已被删除,并保存至文件!n",m);

return head;

}

/*修改学生信息(按编号修改)*/

struct students * Revise()

{

int n=0,t;

char num[10];

char Num[10]; /*字符型学生学号*/

char Name[20]; /*字符型学生姓名*/

char Sex[3]; /*字符型学生性别*/

double English; /*双精度实型英语成绩*/

double Java; /*双精度实型Java成绩*/

double Sjjg; /*双精度实数据结构*/

double Szdl; /*双精度实型数字电路*/

double Jsj; /*计算机组成原理*/

struct students *head=NULL;

struct students *p;

printf("n所有学生信息如下:n");

Browse(head);

head=create(head,&n);

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

scanf("%s",num);

p=head;

while(head!=NULL)

{

if(strcmp(p->Num,num)==0)

{

system("cls");

Revisemenu();

printf("编号为%s的学生信息如下:n",num);

printf("姓名 学号 性别 英语 Java 数据结构 数字电路

计算机n");

15

>Szdl,p->Jsj);

printf("%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn",

p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p-

while(1){

printf("请选择需要修改的信息:");

scanf("%d",&t);

switch(t){

case 1:

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

scanf("%s",Name);

strcpy(p->Name,Name);

break;

case 2:

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

scanf("%s",&Num);

strcpy(p->Num,Num);

break;

case 3:

printf("请输入新性别:");

scanf("%s",Sex);

strcpy(p->Sex,Sex);

break;

case 4:

printf("请输入新英语成绩:");

scanf("%lf",&English);

p->English=English;

break;

case 5:

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

scanf("%lf",&Java);

p->Java=Java;

break;

case 6:

printf("请输入新数据结构成绩:");

scanf("%lf",&Sjjg);

p->Sjjg=Sjjg;

break;

case 7:

printf("请输入新数字电路成绩:");

scanf("%lf",&Szdl);

p->Szdl=Szdl;

break;

case 8:

16

printf("请输入新计算机组成原理成绩:");

scanf("%lf",&Jsj);

p->Jsj=Jsj;

break;

case 0:

system("cls");

menu();

goto lab;

break;

default:

printf("对不起,输入有误!");

break;

}

}

}

else

p=p->next;

}

lab:

fprint_(head);

printf("修改完成,并储存至文件!n");

return head;

}

/*主函数*/

void main()

{

int choice,ch;

char m[15];

struct students *head=NULL;

secret();

menu();

while(1)

{

printf("请输入选项:");

scanf("%d",&choice);

switch(choice)

{

case 1:

Input();

break;

case 2:

system("cls");

menu();

17

Browse(head);

break;

case 3:

system("cls");

menu();

FindofNum(head);

break;

case 4:

system("cls");

menu();

FindofName(head);

break;

case 5:

system("cls");

Sortmenu();

do{

printf("请输入您的选择:");

scanf("%d",&ch);

switch(ch){

case 1:

system("cls");

Sortmenu();

SortEnglish(head);

break;

case 2:

system("cls");

Sortmenu();

SortJava(head);

break;

case 3:

system("cls");

Sortmenu();

SortSjjg(head);

break;

case 4:

system("cls");

Sortmenu();

SortSzdl(head);

break;

case 5:

system("cls");

Sortmenu();

SortJsj(head);

break;

18

}

}

}while(ch!=0);

system("cls");

menu();

break;

case 6:

system("cls");

menu();

Revise();

break;

case 7:

system("cls");

menu();

head=Delete(head,m);

break;

case 0:

system("cls");

printf("tt欢迎下次再来!");

exit(0);

default:

printf("对不起,输入有误!");

break;

}

}

return ;

19


发布者:admin,转转请注明出处:http://www.yc00.com/web/1714434789a2445841.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信