C语言写的学生成绩管理系统(链表)

合集下载

学生个人信息成绩管理系统(c语言动态链表不限定输入学生人数可查询保存的信息)

学生个人信息成绩管理系统(c语言动态链表不限定输入学生人数可查询保存的信息)

struct stu *creat(void) //创建链表的函数,并输入学生信息
{
n=0;
head=NULL;
do
{ p1=(struct stu * ) malloc(LEN);
if(n==1) a=head;
else a=a->next;
if (strcmp (x,a->college)==0)
printf("输出:%12d%10s%18s%10s%10s%5.1f\n",a->num,a->name,a->college,a->Class,a->subject,a->score);
n=i=0;
if (head2!=NULL)
do
{ n=n+1;
i=i+1;
if(n==1) a=head2;
else a=a->next;
if(i==1) sumnum=a->score;
//主模块
#include <stdio.h>
#include <iostream.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#define LEN sizeof(struct stu)
struct stu
printf("输出:%12d%10s%18s%10s%10s%5.1f\n",a->num,a->name,a->college,a->Class,a->subject,a->score);

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

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

让结局不留遗憾,让过程更加完美。

#include<stdio.h>#include<string.h>#include<stdlib.h>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 *headint *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 * headchar m[15]);/*按学号删除学生成绩信息*/struct students * Revise();/*修改学生信息(按编号修改)*//*主菜单*/void menu(){printf("\n\n");printf("***************************************************\n");printf(" 学生成绩管理系统 \n");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("\n\n");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"*/system("cls");}/*新建学生信息*/struct students * Input(){struct students *p1*p2*head; /*建立辅助结点及头结点*/char Name;int n=0x;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; /*判断结束符*/elsescanf("%s%s%lf%lf%lf%lf%lf"p1->Nump1->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); /*调用函数保存至文件*/ elseprintf("\n文件没有被保存!\n");return head; /*返回头指针*/}/*将信息导入文件可追加*/void fprint(struct students *head){struct students *p1;if((fp=fopen("students_list.txt""a"))==NULL){printf("File open error!\n");exit(0);}for(p1=head;p1->next!=NULL;p1=p1->next) /*遍历*/fprintf(fp"%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p1->Namep1->Nump1->Sexp1->Englishp1->Javap1->Sjjgp1->Szdlp1->Jsj);/*将学生信息写入文件*/fclose(fp); /*关闭文件*/printf("\n学生信息已成功保存到文件 students_list.txt 中!\n");getchar();}/*将信息导入文件并覆盖*/void fprint_(struct students *head){struct students *p1;if((fp=fopen("students_list.txt""w"))==NULL)printf("File open error!\n");exit(0);}for(p1=head;p1!=NULL;p1=p1->next) /*遍历*/fprintf(fp"%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p1->Namep1->Nump1->Sexp1->Englishp1->Javap1->Sjjgp1->Szdlp1->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_list.txt""a+"))==NULL){printf("File open error!\n");exit(0);}printf("-------------------------------------------------------------\n");printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(!feof(fp))/*读取并输出*/{fscanf(fp"%s%s%s%lf%lf%lf%lf%lf"NameNum&English&Java&Sjjg&Szdl&Jsj);printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"NameNumSexEnglishJavaSjjgSzdlJsj);};if(fclose(fp)){printf("Can not close the file!\n");exit(0);}}/*从tushu_list中读取数据构建链表*/struct students * create(struct students * headint *n){FILE *fp;struct students*p*p1*p2;if((fp=fopen("students_list.txt""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->Namep->Nump->Sex&p->English&p->Java&p->Sjjg&p->Szdl&p->Jsj);if(head==NULL){head=p;p1=p;}else{p1->next=p;p2=p1;p1=p;}}p2->next=NULL;free(p);(*n)--;fclose(fp);return head;}/*按姓名查询学生信息*/void FindofName(struct students *head) {int i=0n=0;char b[20];struct students *p;head=create(head&n);p=head;printf("\n请输入要查询的学生姓名:");scanf("%s"b);while(p!=NULL){if(strcmp(p->Nameb)==0){printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);i++;}p=p->next;}if(i==0)printf("\n对不起!没有找到名为"%s"的学生信息!\n"b);}/*按学号查询学生信息*/void FindofNum(struct students *head){int i=0n;char b[20];struct students *p;head=create(head&n);p=head;printf("\n请输入要查询的学生学号:");scanf("%s"b);while(p!=NULL){if(strcmp(p->Numb)==0){printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->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("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->English==English){ /*分数相同时无需比较*/ printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/ printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->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;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->Java==Java){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->Java==Java){ /*成绩相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->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) /*利用选择法排序*/{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("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->Sjjg==Sjjg){ /*成绩相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);/*浏览排序后的信息*/printf("按数据结构成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按数字电路排序*/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("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->Szdl==Szdl){ /*成绩相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->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("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->Jsj==Jsj){ /*成绩相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);/*浏览排序后的信息*/printf("按计算机组成原理成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按学号删除学生成绩信息*/struct students * Delete(struct students * headchar 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->Numm)==0)&&head!=NULL){ptr2=head;head=head->next;free(ptr2);}if(strcmp(head->Numm)!=0){ptr1=head;ptr2=head->next;while(ptr2!=NULL){if(strcmp(ptr2->Numm)==0){ptr1->next=ptr2->next;free(ptr2);}elseptr1=ptr2;ptr2=ptr1->next;}}fprint_(head);printf("\n学号为' %s '学生信息已被删除并保存至文件!\n"m);return head;}/*修改学生信息(按编号修改)*/struct students * Revise(){int n=0t;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->Numnum)==0){system("cls");Revisemenu();printf("编号为%s的学生信息如下:\n"num);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);while(1){printf("请选择需要修改的信息:");scanf("%d"&t);switch(t){case 1:printf("请输入新姓名:");scanf("%s"Name);strcpy(p->NameName);break;case 2:printf("请输入新学号:");scanf("%s"&Num);strcpy(p->NumNum);break;case 3:printf("请输入新性别:");scanf("%s"Sex);strcpy(p->SexSex);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:printf("请输入新计算机组成原理成绩:");scanf("%lf"&Jsj);p->Jsj=Jsj;break;case 0:system("cls");menu();goto lab;break;default:printf("对不起输入有误!");break;}}}elsep=p->next;}lab:fprint_(head);printf("修改完成并储存至文件!\n");return head;}/*主函数*/void main(){int choicech;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();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;}}while(ch!=0);system("cls");menu();break;case 6:system("cls");menu();Revise();break;case 7:system("cls");menu();head=Delete(headm);break;case 0:system("cls");printf("\t\t欢迎下次再来!");exit(0);default:printf("对不起输入有误!");break;}}return ;}。

用链表与文件实现学生成绩管理系统

用链表与文件实现学生成绩管理系统
};
class Student
{
public:
Student();
void Ofile(ofstream &of);
void Infile(ifstream &f);
void Out();
void Set(char *name,int no,Class score);
char *GetName();
Student_First=new Student;
Read();
}
Function::~Function()
{
delete Student_First;
}
void Function::Add() //录入学生成绩信息函数
{
char name[20];
int no;
Class score;
char choose;
#include <iostream>
#include <fstream>
#include<cstring>
#include<conio.h>
#include <ctime>
using namespace std;
struct Class
{
int Chinese;
int Math;
int English;
do
{
cout<<"输入查询方式:\n1.按姓名查询\n2.按学号查询\n";
cin>>choose;
if(choose=='1')
{ cout<<"请输入您要查询的姓名:";

学生成绩管理系统c语言代码(供参考)

学生成绩管理系统c语言代码(供参考)

C程序学生管理系统以下是用C语言编写的学生成绩管理系统的简单代码,可以用vc运行(供参考)#include"stdio.h"#include”stdlib。

h"#include"string。

h”typedefstruct student//定义学生{char name[10];int number;char sex[2];int math;int eglish;int clanguge;int average;}student;typedefstruct unit//定义接点{studentdate;struct unit*next;}unit;unit大build()//建立链表并返回指针{unit*p;if((p=(unit*)malloc(sizeof(unit)))==NULL){printf("二>初始化失败!”);return0;}else{p—>next=NULL;p-〉date.number=O;//头结点存放学生人数printf("初始化成功!\n");return p;}}void add(unit大head)//增加学生{unit*p,*q;int m,n=0;q=head-〉next;p=(unit*)malloc(sizeof(unit));printf(”二〉请输入新生姓名!\n");gets(p—>);fflush(stdin);printf("二〉请输入学号!\n");while(n==0){scanf("%d",&m);fflush(stdin);if(q二二NULL)n二1;while(q){if(q->date.number==m){prinTf("二>你输入的学号与已有同学的学号相同,请重新输入!\n");q=head-〉next;break;}else{q=q->next;if(q==NULL)n=1;}}}p一〉date。

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

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

#include ”stdio.h”#include ”string.h”#include "stdlib.h"#include "conio.h"#include ”string.h”#include "fcntl。

h"typedef struct student{int num;char grade[10];char classroom[10];char name[10];float score_math;float score_chinese;float score_english;float average;float sum;}STU;typedef struct Node{STU data;struct Node *next;}*linklist;void menu();char *loginpassword(char password[],int n);//登录验证密码函数声明//linklist createstulist(linklist head);//创建学生链表即学生信息录入函数声明// void printstulist(linklist head);//学生信息输出函数声明//void searchstu_namelist(linklist head);//学生信息查询函数声明(按姓名)// void searchstu_numlist(linklist head);//学生信息查询函数声明(按学号) linklist modifystulist(linklist head);//学生信息修改函数声明//linklist delatestulist(linklist head);//学生信息删除函数声明//void savestulist(linklist head);//学生信息保存到文件函数声明// linklist loadstulist();//从文件中读取学生信息函数声明// void sortstulist(linklist head); //成绩排名函数(按年级)声明//void sort(STU stu[],int flag); //学生分班函数声明//void sortstuclass(linklist head); //成绩排名函数(按班级)声明////*************************************//void main(){char admin[]=”zhangqiong";char password[]=”123456";char person[20];char password1[10];int i;printf(”********************************************************************************\n”);printf("\t\t **********欢迎来到学生成绩管理系统**********\n\n");printf(”********************************************************************************\n\n”);printf(”\t\t\t\t用户登录\n\n\n\n");for(i=0;i<3;i++){printf("用户名:”);gets(person);fflush(stdin);printf(”\n\n\n”);loginpassword(password1,10);printf("\n\n\n”);if(strcmp(admin,person)==0&&strcmp(password,password1)==0){printf(”\t\t\t\t成功登录,亲!\n”);printf("\n\n”);printf(”按任意键继续!”);getch();menu();break;}elseprintf("\t用户名或者密码输入错误\n”);}if(i==3)printf("\t对不起,您今天输入次数太多,已被强制退出!\n”);}//**********************************************************////**********************************************************//char *loginpassword(char password[],int n)//登录密码函数,隐藏密码可见//{int i=0;int m=0;char ch;printf("用户密码:”);while((ch=getch())!='\r’&&m〈n){password[i++]=ch;printf(”*");}password[i]='\0';return password;}//***************************************************// void menu()//主界面函数//{system("cls");linklist L;L=(linklist)malloc(sizeof(Node));L—>next=NULL;int ch;do{printf(”\t -——-----—-******——--——--—---******—————-————-******-—-—-—-—-—\n\n");printf("\t\t\t**********学生成绩管理系统***********\n\n”);printf("\t ——----——--******-—-——------—******—---———--—-******—---———-——\n\n\n\n\n");printf("\t1。

c语言学生成绩管理系统(链表版)

c语言学生成绩管理系统(链表版)

#include <stdio.h> #include <stdlib.h>#include <string.h>#include <conio.h>#include <windows.h>#include <ctype.h>#define YES 1#define NO 0typedef struct{int num;float math_score;float engl_score;float chin_score;float phy_score;float chem_score;double aver_score;double sum_score;char sex;}StudentDate;//学生基本信息typedef struct student{char name[20];//学生姓名StudentDate one;//学生其他信息int rank;//成绩排名struct student *next;}Student, *List;Student *startCheck(void);//开始检查Student *createListHead(void);//创建链表的头void menu(void);//主菜单void sortList(Student *pHead);//排序链表void readListWithFile(Student *pHead, char *file_name);//从文件中读取数据,并保存在链表中void sorttList(Student *pHead);//排序链表int userChioce(Student *pHead);//用户选择int sortMenu(void);//打印选择菜单void passwordCheck(void);//密码检测void correctWord(void);//修改密码void addStudentInfo(Student *pHead);//向链表的末尾添加数据int scanMenu(void);//浏览菜单void findStudentInfo(Student *pHead);//查找学生信息void delStudentInfo(Student *pHead);//删除某一个学生信息void alterStudentInfo(Student *pHead);//修改学生信息void saveList(Student *pHead);//将链表保存在文件里void printList(Student *pHead);//打印链表void statisStudentInfo(Student *pHead);//查看学生信息int statisMenu(void);//查看菜单void gotoxy(int x, int y);//改变光标位置函数void inputData(Student *pHead, Student *node);//输入信息,并检测是否合法int main(void){Student *pHead;HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);//得到窗口句柄SMALL_RECT rc = { 0, 0, 94 - 1, 30 - 1 }; //{Y位置,X位置,宽,高} SetConsoleWindowInfo(hOut, true, &rc);// 重置窗口位置和大小system("color 5B");//设置控制台颜色pHead = startCheck();//读取信息while (1){if (9 == userChioce(pHead)) //按9时退出系统{break;}}return 0;}void menu(void){system("CLS");//清屏printf("\n\n\n\t\t\t\t┌─────────────────┐\n"); printf("\t\t\t\t│学生成绩统计系统│\n");printf("\t\t\t\t├─────────────────┤\n");printf("\t\t\t\t│ 1 增加学生记录│\n");printf("\t\t\t\t├─────────────────┤\n");printf("\t\t\t\t│ 2 删除学生记录│\n");printf("\t\t\t\t├─────────────────┤\n");printf("\t\t\t\t│ 3 修改学生记录│\n");printf("\t\t\t\t├─────────────────┤\n");printf("\t\t\t\t│ 4 查找学生信息│\n");printf("\t\t\t\t├─────────────────┤\n");printf("\t\t\t\t│ 5 统计学生成绩│\n");printf("\t\t\t\t├─────────────────┤\n");printf("\t\t\t\t│ 6 查看学生成绩│\n");printf("\t\t\t\t├─────────────────┤\n");printf("\t\t\t\t│7 修改登陆密码│\n");printf("\t\t\t\t├─────────────────┤\n"); printf("\t\t\t\t│8 关于│\n");printf("\t\t\t\t├─────────────────┤\n"); printf("\t\t\t\t│9 退出系统│\n");printf("\t\t\t\t└─────────────────┘\n"); }void gotoxy(int x, int y)//x为列坐标,y为行坐标{COORD pos = { x, y };HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hOut, pos);}Student *startCheck(void){Student *pHead;FILE *fp1;char password[20] = "123456";int i;if ((fp1 = fopen("password.dat", "rb")) == NULL)//若密码文件不存在,新建密码文件{fp1 = fopen("password.dat", "wb");fwrite(password, 20, 1, fp1);fclose(fp1);printf("密码初始化完成!(默认密码为:123456)");passwordCheck();}else{passwordCheck();}//读条system("CLS");system("title 学生成绩统计系统-载入中");//将标题栏命名为“学生成绩统计系统”printf("\n\n\t\t\t欢迎进入本系统!正在载入.....");printf("\n\n\n\n\t\t\t┏━━━━━━━━━━┓\n"); printf("\t\t\t┃┃\n");printf("\t\t\t┗━━━━━━━━━━┛\n");gotoxy(26, 7);for ( i = 0; i < 10; i++){printf("█");Sleep(100);}pHead = createListHead();readListWithFile(pHead, "stud.dat");return pHead;}Student *createListHead(void){Student *pHead;pHead = (List)malloc(sizeof(Student));pHead->next = NULL;return pHead;}void readListWithFile(Student *pHead, char *file_name) { FILE *fp;Student *p1, *p2;int count, rank = 0;StudentDate dat;char stu_name[20];fp = fopen(file_name, "r");if (fp == NULL){fp = fopen(file_name, "w");fclose(fp);return;}fseek(fp, 0L, 2);count = ftell(fp);p1 = pHead;fp = fopen(file_name, "r");while (!feof(fp)){p2 = (List)malloc(sizeof(Student));fscanf(fp, "%d%s %c%f%f%f%f%f\n", &p2->one.num, p2->name, &p2->one.sex, &p2->one.chin_score,&p2->one.math_score, &p2->one.engl_score, &p2->one.chem_score, &p2->one.phy_score);p2->one.sum_score = (double)(p2->one.chin_score + p2->one.chin_score + p2->one.engl_score +p2->one.chem_score + p2->one.phy_score);p2->one.aver_score = p2->one.sum_score / 5;p2->next = NULL;p1->next = p2;p1 = p2;if (ftell(fp) == count){break;}}//将链表排序,并初始化排名for (p1 = pHead->next; p1 != NULL; p1 = p1->next) {for (p2 = p1->next; p2 != NULL; p2 = p2->next) {if (p2->one.aver_score > p1->one.aver_score){dat = p2->one;strcpy(stu_name, p2->name);p2->one = p1->one;strcpy(p2->name, p1->name);p1->one = dat;strcpy(p1->name, stu_name);}}p1->rank = ++rank;}fclose(fp);}void sortList(Student *pHead) {Student *p1, *p2; StudentDate dat;char stu_name[20];int bum, count = 0, rank;。

c语言学生成绩信息管理系统源代码

c语言学生成绩信息管理系统源代码

C语言学生成绩信息管理系统源代码一、概述在学校教学管理工作中,学生成绩信息管理是一个至关重要的环节。

为了方便高效地进行学生成绩信息的录入、查询和管理,我们可以利用C语言编写一个学生成绩信息管理系统。

本文将介绍该系统的源代码,并对其进行详细的解释和讲解。

二、系统功能需求1. 录入学生成绩信息2. 查询学生成绩信息3. 修改学生成绩信息4. 删除学生成绩信息5. 显示所有学生成绩信息三、系统源代码实现```c#include <stdio.h>#include <stdlib.h>#include <string.h>// 定义学生结构体typedef struct student {int id; // 学号char name[20]; // 尊称float score; // 成绩} Student;// 全局变量int count = 0; // 记录学生数量Student students[100]; // 学生数组// 录入学生成绩信息void inputStudentInfo() {printf("请输入学生学号:");scanf("d", students[count].id);printf("请输入学生尊称:");scanf("s", students[count].name); printf("请输入学生成绩:");scanf("f", students[count].score); count++;}// 查询学生成绩信息void queryStudentInfo(int id) {for (int i = 0; i < count; i++) {if (students[i].id == id) {printf("学生信息如下:\n");printf("学号:d\n", students[i].id);printf("尊称:s\n", students[i].name);printf("成绩:.2f\n", students[i].score);return;}}printf("未找到该学生信息!\n");}// 修改学生成绩信息void modifyStudentInfo(int id, char *name, float score) { for (int i = 0; i < count; i++) {if (students[i].id == id) {strcpy(students[i].name, name);students[i].score = score;printf("修改成功!\n");return;}}printf("未找到该学生信息!\n");}// 删除学生成绩信息void deleteStudentInfo(int id) {for (int i = 0; i < count; i++) {if (students[i].id == id) {for (int j = i; j < count - 1; j++) { students[j] = students[j + 1]; }count--;printf("删除成功!\n");return;}}printf("未找到该学生信息!\n");}// 显示所有学生成绩信息void displayAllStudentInfo() {if (count == 0) {printf("暂无学生信息!\n");return;}printf("学生成绩信息如下:\n");for (int i = 0; i < count; i++) {printf("学号:d,尊称:s,成绩:.2f\n", students[i].id, students[i].name, students[i].score);}}int m本人n() {int choice, id;char name[20];float score;while (1) {printf("欢迎使用学生成绩信息管理系统!\n");printf("1. 录入学生成绩信息\n");printf("2. 查询学生成绩信息\n");printf("3. 修改学生成绩信息\n");printf("4. 删除学生成绩信息\n");printf("5. 显示所有学生成绩信息\n");printf("6. 退出系统\n");printf("请选择操作:");scanf("d", choice);switch (choice) {case 1: // 录入学生成绩信息inputStudentInfo();break;case 2: // 查询学生成绩信息printf("请输入要查询的学生学号:"); scanf("d", id);queryStudentInfo(id);break;case 3: // 修改学生成绩信息printf("请输入要修改的学生学号:"); scanf("d", id);printf("请输入修改后的尊称:");scanf("s", name);printf("请输入修改后的成绩:");scanf("f", score);modifyStudentInfo(id, name, score); break;case 4: // 删除学生成绩信息printf("请输入要删除的学生学号:"); scanf("d", id);deleteStudentInfo(id);break;case 5: // 显示所有学生成绩信息displayAllStudentInfo();break;case 6: // 退出系统printf("感谢使用学生成绩信息管理系统!\n");exit(0);default:printf("请输入正确的操作!\n");}}return 0;}```四、系统运行效果1. 运行系统后,会出现一个菜单,根据需求选择相应的操作。

学生成绩管理链表C代码

学生成绩管理链表C代码

学生成绩管理#include <stdio.h>#include <stdlib.h>#include <Windows.h>#include <string.h>#define OK 1#define ERROR 0#define OVERFLOW -2typedef int Status;typedef struct{char num[10]; // 学号char name[20]; // 姓名float score; // 成绩}student;typedef student ElemType;typedef struct LNode{ElemType data;struct LNode *next;}LNode,*LinkList;typedef LinkList Sta;//创建一个空表Sta CreateList_L(LinkList L){L=(LinkList)malloc(sizeof(LNode));if(!L) return OVERFLOW;L->next=NULL;return L;}Status ListInsert_L(LinkList L,int i,ElemType e)//在带头结点的单链表L中第i个位置前插入某个学生的信息{LinkList p,s;p=L;int j=0;while(p&&j<i-1){p=p->next;++j;}if(!p||j>i-1) return ERROR;s=(LinkList)malloc(sizeof(LNode));s->data=e;s->next=p->next;p->next=s;return OK;}//删除学生信息Status ListDelete_L(LinkList L,int i,ElemType *e) {LinkList p=L;int j=0;while(p->next&&j<i-1){p=p->next;++j;}if(!(p->next)||j>i-1)return ERROR;LinkList q=NULL;q=p->next;p->next=q->next;*e=q->data;free(q);return OK;}Status LocateElem_L(LinkList L,student e){if(L==NULL)printf("OK");LinkList p=L->next;if(p==NULL)printf("OK");int i=1;while(p){if(strcmp(p->data.num,e.num)==0) return i;p=p->next;i++;}return 0;}Status GetElem(LinkList L,int i,ElemType *e) // 访问链表,找到i位置的数据域,返回给e {LinkList p;p=L->next;int j=1;while(p&&j<i){p=p->next;++j;}if(!p||j>i) return ERROR;*e=p->data;return OK;}Status ListLength(LinkList L){int i=0;LinkList p=L->next;while(p){i++;p=p->next;}return i;}Status input(char *stu,LinkList L){int n;student s;FILE *fp;fp=fopen(stu,"w");if(fp == NULL){perror("fopen"); // 文件打开失败,打印错误信息return -1;}printf("\n\t请输入学生人数:");scanf("%d",&n);printf("\n\t请输入学生学号、姓名和成绩\n");for(int i=1;i<=n;i++){printf("\n\t学号:");scanf("%s",s.num);printf("\t姓名:");scanf("%s",);printf("\t成绩:");scanf("%f",&s.score);printf("\n");fprintf(fp,"%s %s %f\n",s.num,,s.score);ListInsert_L(L,i,s);}printf("\n\t输入完毕!\n\t");system("pause");fclose(fp);return OK;}void load(char *stu,LinkList L){student s;int i=1;FILE *fp;fp=fopen(stu,"r");if(fp == NULL){printf("can't open file!") ; // 文件打开失败,打印错误信息exit(0);}printf("\n\t\t----学生成绩信息表----\n\n");printf("\n\t\t学号\t姓名\t成绩\n");while(fscanf(fp,"%s%s%f",s.num,,&s.score)!=EOF){ListInsert_L(L,i,s);printf("\n\t\t%s\t%s\t%f\n",s.num,,s.score);i++;}fclose(fp);}//保存Status save(char *stu,LinkList L){LinkList p=L->next;FILE *fp;fp=fopen(stu,"w");if(fp == NULL){perror("fopen"); // 文件打开失败,打印错误信息return -1;}while(p){fprintf(fp,"%s\t%s\t%f\n",p->data.num,p->,p->data.score);p=p->next;}fclose(fp);return OK;}//输出单个学生信息Status Single_Out(student *e){printf("\n\t%s\t%s\t%f",e->num,e->name,e->score);return OK;}//遍历链表并输出void Listtraverse(LinkList L){int i=1;LinkList s=L->next;if(s==NULL)printf("\n用户尚未录入任何数据!!\n");else{printf("\n\t\t--当前全部学生信息如下--\n");printf("\n\t\t学号\t姓名\t成绩\n");while(s){printf("\n\t%d\t",i);printf(s->data.num);printf("\t");printf(s->);printf("\t");printf("%f",s->data.score);printf("\n");s=s->next;i++;}}}int main(){int ID;int keywords;printf("\n\n\t用户名:");scanf("%d",&ID);printf("\n\n\t用户密码:");scanf("%d",&keywords);if(ID==123&&keywords==123){fun();}else{printf("\n\n\t用户名或密码输入错误,系统拒绝访问\n\t请按任意键退出");}system("pause");return 0;}void fun(){system("cls");student s;LinkList L=CreateList_L(L);int i,a;char c;int flag=1;char addlist[30];printf("\n\n\t请输入成绩表的文件名:");scanf("%s",addlist);FILE *fp;fp=fopen(addlist,"r");if(fp == NULL){printf("\n\n\t成绩表不存在,建立一个新的成绩表(Y/N)?");scanf(" %c",&c);if(c=='Y'||c=='y'){fclose(fp);input(addlist,L);}}else{fclose(fp);load(addlist,L);printf("\t\t\n");system("pause");}while(flag){system("cls"); //清屏printf("\n\t---\t 欢迎使用学生管理系统\t---\t\n\n");printf("\n\t\t -------------------- \t\t\n\n");printf("\t|*\t 1 输入学生信息\n\n");printf("\t|*\t 2 删除学生信息\n\n");printf("\t|*\t 3 修改学生信息\n\n");printf("\t|*\t 4 按学号查找学生\n\n");printf("\t|*\t 5 输出成绩表\n\n");printf("\t|*\t 6 保存\n\n");printf("\t|*\t 7 退出\n\n");printf("\t请输入序号选择功能:");scanf("%d",&a);switch(a){case 1:system("cls");printf("\n\t请输入插入位置:");scanf("%d",&i);printf("\n\t请输入学生信息");printf("\n\t学号:");scanf("%s",s.num);printf("\n\t姓名:");scanf("%s",);printf("\n\t成绩:");scanf("%f",&s.score);if(ListInsert_L(L,i,s)){printf("\n\t插入成功\n");}else printf("\n\t插入失败\n");system("pause");break;case 2:system("cls");printf("\n\t请输入要删除的学生学号:");scanf("%s",s.num);i=LocateElem_L(L,s);if(i){if(ListDelete_L(L,i,&s))printf("\n\n\t删除成功!");else printf("\n\n\t删除失败!");}else printf("\n\n\t学号不存在,请核对后输入!");system("pause");break;case 3:system("cls");printf("\n\t请输入要修改的学生学号:");scanf("%s",s.num);i=LocateElem_L(L,s);if(i){printf("\n\n\t确实要修改么Y/N?");scanf(" %c",&c);if(c=='y'||c=='Y'){ListDelete_L(L,i,&s);printf("\n\n\t请输入修改后的信息:\n");printf("\n\t学号:");scanf("%s",s.num);printf("\t姓名:");scanf("%s",);printf("\t成绩:");scanf("%f",&s.score);ListInsert_L(L,i,s);printf("\n\t修改成功!\n\t");}}else printf("\n\n\t学号为%s的学生不存在!!\n",s.num);system("pause");break;case 4:system("cls");printf("\n\n\t请输入要查找的学生学号:");scanf("%s",s.num);i=LocateElem_L(L,s);GetElem(L,i,&s);if(i){Single_Out(&s);system("pause");}else{printf("\n\n\n\t学号为%s的学生不存在,请核对后输入!!\n",s.num);system("pause");}break;case 5:system("cls");Listtraverse(L);system("pause");break;case 6:system("cls");printf("\n\n\t请输入文件名称:");scanf("%s",addlist);save(addlist,L);printf("\n\n\t保存成功!\n\n\t");system("pause");break;case 7:flag=0;break;}}}。

学生成绩管理系统(链表版)

学生成绩管理系统(链表版)

《C语言应用》实验报告题目学生成绩管理系统(链表版)(1)能完成学生成绩的插入、查询、修改、删除、输出等功能;(2)采用单链表存储结构实现;(3)所有数据以外部文件方式保存第2章第2章总体设计2。

1 系统的程序流程图绘制一个系统的总体程序流程图,主要展示系统从开始以后,可以经过哪些流程,最后结束。

按姓名修改某位同学的成绩按姓名修改某位同学的成绩输出链表内容输出链表内容2。

2系统的全局变量和常量系统全局变量int n;char a;头文件:#include "stdio.h"#include ”time。

h"#include "string。

h”#include ”stdlib.h"#include ”conio。

h"2。

3系统的函数介绍把系统中的每个函数的原型列出来,解释一下函数的返回值及形式参数的含义;最后,再介绍一下每个函数的功能。

void Create(int n)//创建链表void List()//输出链表内容void list()//输出链表所有内容void save()//文件保存void save1() //文件保存void read()//文件读取void read1()//文件读取void SA VE(){ //保存到可浏览文件void SA VE1() //保存到可浏览文件void sort_data_copy(Lstu *p,Lstu *s)//交换排序时的值void sort()//对初始成绩进行排序void sort1()//对所有数据进行排序void search_print(Lstu *p)//输出查找信息void search_choose()//选择按分数段查找方式void search()//查找void modify_choose(Lstu *p,int n)//选择修改方式void modify()//按姓名修改void Insert()//按序号插入void del() //按姓名删除void statistics()//成绩统计int menu() //菜单(主界面)第3章第3章详细设计按函数,写出函数的原型声明,并画出每个函数的程序流程图。

C语言写的学生成绩管理系统(链表)

C语言写的学生成绩管理系统(链表)

#include<stdio.h>#include<string.h>#include<stdlib.h>struct stud{long num;char name[20];float sx;float dx;float ts;float dl;float cx;float zf;float pj;};struct studcode{struct stud student;struct studcode *next;};void menu();void input(struct studcode **);void output(struct studcode *);void binsearch(struct studcode *);void insert(struct studcode **);void delet(struct studcode **);void good(struct studcode *);void fail(struct studcode *);void sort(struct studcode *);void back();void main(){char choose;int flag=1;struct studcode *head;head=NULL;printf("请先录入学生成绩信息\n");printf("输入学生学号姓名高数、英语读写、英语听说、计算机导论和程序设计的成绩\n");input(&head);while (flag){system("cls");menu();printf("请选择:");getchar();choose=getchar();switch(choose){case '1':output(head);back();break;case '2':binsearch(head);back();break;case '3':insert(&head);output(head);back();break;case '4':delet(&head);output(head);back();break;case '5':good(head);back();break;case '6':fail(head);back();break;case '7':sort(head);output(head);back();break;case '0':flag=0;printf("\n *** The End! ***\n");printf("\n ####感谢使用,欢迎再次登录,拜拜!####\n");break;default: printf("\n Wrong Selection !(选择错误,请重选)\n");back();}}}void menu(){printf(" \n 学生成绩统计与分析系统\n");printf(" \n 菜单\n\n");printf(" \n 1. 显示所有学生的信息\n");printf(" \n 2. 查找某学号的学生信息\n");printf(" \n 3. 插入某学生的信息 \n");printf(" \n 4. 删除某学号学生的信息\n");printf(" \n 5. 统计各门课程成绩在90分以上学生所占百分比\n");printf(" \n 6. 统计各门课程成绩在60分以下学生所占百分比 \n");printf(" \n 7. 按总分降序排序,依高低排出名次 \n");printf(" \n 0. 退出 \n\n");}void back(){int x;printf("\n");do{printf("按1返回菜单界面:");scanf("%d",&x);}while(x!=1);}void input(struct studcode **headp){struct studcode *p;while(1){p=(struct studcode *)malloc(sizeof(struct studcode));scanf("%ld",&p->student.num);if(p->student.num==0) break;scanf("%s%f%f%f%f%f",&p->,&p->student.sx,&p->student.dx,&p->stu dent.ts,&p->student.dl,&p->student.cx);p->student.zf=p->student.sx+p->student.dx+p->student.ts+p->student.dl+p->st udent.cx;p->student.pj=p->student.zf/5;p->next=*headp;*headp=p;}}void output(struct studcode *head){struct studcode *p;p=head;printf("学号\t姓名\t高数\t读写\t听说\t导论\t程序\t总分\t平均分\n");while(p!=NULL){printf("%-ld\t%-4s\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\ n",p->student.num,p->,p->student.sx,p->student.dx,p->student.ts,p-> student.dl,p->student.cx,p->student.zf,p->student.pj);p=p->next;}printf("\n");}void binsearch(struct studcode *head){struct studcode *p;int k=1;long x;p=head;printf("请输入需要查找的学生的学号:");scanf("%ld",&x);printf("\n");while(p!=NULL){if(p->student.num==x){printf("该学生信息如下:\n");printf("学号\t姓名\t高数\t读写\t听说\t导论\t程序\t总分\t平均分\n");printf("%-ld\t%-4s\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\n",p ->student.num,p->,p->student.sx,p->student.dx,p->student.ts,p->student.dl,p->stude nt.cx,p->student.zf,p->student.pj);k=0;break;}p=p->next;}if(k) printf("没有此学生的信息\n");}void insert(struct studcode **headp){struct studcode *p;p=(struct studcode *)malloc(sizeof (struct studcode));printf("请输入你想插入的学生的信息\n");scanf("%ld%s%f%f%f%f%f",&p->student.num,&p->,&p->student.sx,&p->student.dx,&p->student.ts,&p->student.dl,&p->student.cx);p->student.zf=p->student.sx+p->student.dx+p->student.ts+p->student.dl+p->st udent.cx;p->student.pj=p->student.zf/5;p->next=*headp;*headp=p;printf("*****插入成功*****\n");}void delet(struct studcode **headp){struct studcode *p,*last;long x;p=*headp;printf("请输入你要删除的学生的学号:");scanf("%ld",&x);while(p->student.num!=x&&p->next!=NULL){last=p;p=p->next;}if(p->student.num==x){if(p==*headp)*headp=p->next;elselast->next=p->next;free(p);printf("\n*****删除成功*****\n");}else printf("\n***删除失败,无该学生信息***\n");}void good(struct studcode *head){struct studcode *p;int x1,x2,x3,x4,x5,k;float y1,y2,y3,y4,y5;x1=x2=x3=x4=x5=k=0;p=head;while(p!=NULL){k++;if(p->student.sx>=90) x1++;if(p->student.dx>=90) x2++;if(p->student.ts>=90) x3++;if(p->student.dl>=90) x4++;if(p->student.cx>=90) x5++;p=p->next;}y1=(float)x1/k;y2=(float)x2/k;y3=(float)x3/k;y4=(float)x4/k;y5=(float)x5/k;printf("高数\t读写\t听说\t导论\t程序\n");printf("%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\n",y1,y2,y3,y4,y5); }void fail(struct studcode *head){struct studcode *p;int x1,x2,x3,x4,x5,k;float y1,y2,y3,y4,y5;x1=x2=x3=x4=x5=k=0;p=head;while(p!=NULL){k++;if(p->student.sx<60) x1++;if(p->student.dx<60) x2++;if(p->student.ts<60) x3++;if(p->student.dl<60) x4++;if(p->student.cx<60) x5++;p=p->next;}y1=(float)x1/k;y2=(float)x2/k;y3=(float)x3/k;y4=(float)x4/k;y5=(float)x5/k;printf("高数\t读写\t听说\t导论\t程序\n");printf("%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\n",y1,y2,y3,y4,y5); }void sort(struct studcode *head){struct stud temp;int i,j,n;struct studcode *p,*p1,*p2;n=0;p=head;while(p!=NULL){n++;p=p->next;}for(p1=head,i=0;i<n-1;i++,p1=p1->next)for(p2=p1->next,j=i+1;j<n;j++,p2=p2->next)if(p1->student.zf<p2->student.zf){temp=p2->student;p2->student=p1->student;p1->student=temp;}printf("\n*****排序成功*****\n"); }。

学生成绩管理系统C语言版

学生成绩管理系统C语言版

1、2、编一程序,能计算每个学生的总分和平均分。

3、编一程序,能按输入要求打印各门课程的最高分和最低分的同学。

4、编一程序,能将五个学生的成绩按总分进行降序排序。

5、编一程序,能删除一个学生的记录;6、编一程序,能增加一个学生的记录;建立一个菜单模式的学生信息管理系统,完成功能如下:一、建立主菜单*****学生信息管理系统*****1、输入学生信息2、输出学生信息3、计算每个同学成绩的总分与平均分4、对学生成绩进行排序5、输出每门功课最高分的同学信息6、输出每门功课最低分的同学信息7、退出系统主菜单界面:二、将综合练习一中的程序改写为子程序并能通过主菜单进行调用。

先上图开发环境windows 7,vc 6.0 开始贴代码:/*************** 张海山* 10软件2班* 安庆职业技术学院* QQ:136533295******************/#include"stdio.h"#include"stdlib.h"#include"malloc.h"#include"string.h"typedef struct lode{int id;char name[20];char sex[10];int score[4];struct lode *next;}lode,*linklist;linklist input(linklist head)//输入学生信息{char cmd='y';int t,i,l;char name[10];char sex[2];int score[3]={0};//int sum;linklist p;while(cmd=='y'||cmd=='Y'){p=(linklist)malloc(sizeof(lode));printf("请输入学生的编号\n");fflush(stdin);scanf("%d",&t);p->id=t;printf("请输入学生的姓名:\n");fflush(stdin);scanf("%s",p->name);/* l=strlen(p->name);p->sex[l]='\0';/* for(i=0;i<l;i++){p->name[i]=name[i];}*/printf("请输入学生的性别:\n");fflush(stdin);scanf("%s",p->sex);/* l=strlen(p->sex);p->sex[l]='\0';/* for(i=0;i<l;i++){p->sex[i]=sex[i];}*/fflush(stdin);printf("请依次输入学生的三门课成绩:\n");scanf("%d",&score[0]);p->score[0]=score[0];fflush(stdin);scanf("%d",&score[1]);p->score[1]=score[1];fflush(stdin);scanf("%d",&score[2]);p->score[2]=score[2];fflush(stdin);p->next=head->next;head->next=p;printf("是否继续(y)&返回主菜单(n) y&n\n");fflush(stdin);scanf("%c",&cmd);}return head;}linklist print(linklist head){linklist p;int i=1;p=head->next;printf("\t序号\t姓名\t性别\t英语\t数学\t语文\n");while(p!=NULL){printf("\t%d\t%s\t%s\t%d\t%d\t%d\n",p->id,p->name,p->sex,p->score[0],p->score[1],p->sco re[2]);p=p->next;/*if(p==NULL)break;printf("%d\n",i);*/}//printf("%d\n",i);//printf("i=%d\n",i);return 0;}void avg(linklist head){int sum=0;double avg=0;linklist p;p=head->next;while(p!=NULL){sum=0;sum=p->score[1]+p->score[2]+p->score[0];avg=sum/3;printf("%s的总分为:%d\t平均分为:%.2lf\n",p->name,sum,avg);p=p->next;}}void maxmin(linklist head){linklist p;intmax1=0,max1index,min1=head->next->score[0],min1index,max2=0,max2index,min2=head->nex t->score[1],min2index,max3=0,max3index,min3=head->next->score[2],min3index;p=head->next;while(p!=NULL){if(max1<(p->score[0])){max1=p->score[0];max1index=p->id;}if(min1>=(p->score[0])){min1=p->score[0];min1index=p->id;}if(max2<(p->score[1])){max2=p->score[1];max2index=p->id;}if(min2>=(p->score[1])){min2=p->score[1];min2index=p->id;}if(max3<(p->score[2])){max3=p->score[2];max3index=p->id;}if(min3>=(p->score[2])){min3=p->score[2];min3index=p->id;}p=p->next;}printf("英语:\n");p=head->next;while(p!=NULL){if((p->id)==max1index)printf("英语最高分为:%d\t姓名为:%s\n",p->score[0],p->name);if((p->id)==min1index)printf("英语最低分为:%d\t姓名为:%s\n",p->score[0],p->name);p=p->next;}printf("数学:\n");p=head->next;while(p!=NULL){if((p->id)==max2index)printf("数学最高分为:%d\t姓名为:%s\n",p->score[1],p->name);if((p->id)==min2index)printf("数学最低分为:%d\t姓名为:%s\n",p->score[1],p->name);p=p->next;}printf("语文:\n");p=head->next;while(p!=NULL){if((p->id)==max3index)printf("语文最高分为:%d\t姓名为:%s\n",p->score[2],p->name);if((p->id)==min3index)printf("语文最低分为:%d\t姓名为:%s\n",p->score[2],p->name);p=p->next;}}void rank(linklist head){linklist p;int i=0,j,k,n=0;int sum[100];p=head->next;while(p!=NULL){n++;sum[i]=p->score[1]+p->score[2]+p->score[0];i++;p=p->next;}printf("n=%d\n",n);for(i=1;i<6;i++){for(j=0;j<6-i;j++)if(sum[j]<sum[j+1]){k=sum[j];sum[j]=sum[j+1];sum[j+1]=k;}}printf("\t序号\t姓名\t性别\t英语\t数学\t语文\n");for(i=0;i<n;i++){p=head->next;while(p!=NULL){if(sum[i]==(p->score[1]+p->score[2]+p->score[0])){printf("\t%d\t%s\t%s\t%d\t%d\t%d\n",p->id,p->name,p->sex,p->score[0],p->score[1],p->sco re[2]);break;}p=p->next;}}}void add(linklist head){linklist p,q;p=head;q=(linklist)malloc(sizeof(lode));printf("请输入要插入学生的序号:\n");fflush(stdin);scanf("%d",&q->id);fflush(stdin);printf("请输入学生的姓名:\n");scanf("%s",q->name);fflush(stdin);printf("请输入学生性别:\n");scanf("%s",q->sex);fflush(stdin);printf("请依次输入学生的三门课成绩:\n");scanf("%d",&q->score[0]);fflush(stdin);scanf("%d",&q->score[1]);fflush(stdin);scanf("%d",&q->score[2]);fflush(stdin);q->next=NULL;while(p->next!=NULL){p=p->next;}p->next=q;//p->next=NULL;}void del(linklist head){linklist p,temp;int j;p=head->next;temp=head;printf("请输入要删除学生记录的序号:\n");scanf("%d",&j);while(p!=NULL){if(p->id!=j){p=p->next;temp=temp->next;}else{temp->next=p->next;free(p);break;}}}void main(){int cmd;linklist head;head=(linklist)malloc(sizeof(lode));head->next=NULL;do{printf("\n\n |***************学生成绩管理程序***************|\n");printf(" |----------------------------------------------|\n");printf(" | |\n");printf(" | 主菜单|\n");printf(" | |\n");printf(" |----------------------------------------------|\n");printf(" | |\n");printf(" | 请输入选择项目:|\n");printf(" | |\n");printf(" | 1、输入学生成绩|\n");printf(" | |\n");printf(" | 2、输出学生成绩|\n");printf(" | |\n");printf(" | 3、计算总成绩、平均成绩|\n");printf(" | |\n");printf(" | 4、求最高分、最低分|\n");printf(" | |\n");printf(" | 5、排序|\n");printf(" | |\n");printf(" | 6、增加记录|\n");printf(" | |\n");printf(" | 7、删除记录|\n");printf(" | |\n");printf(" | 0、退出系统|\n");printf(" | |\n");printf(" |----------------------------------------------|\n");scanf("%d",&cmd);switch(cmd){case 0:break; //退出系统case 1: input(head);break; //输入学生信息case 2: print(head);break; //输出学生信息case 3: avg(head);break; //求总成绩、平均数case 4: maxmin(head);break; //最高分case 5: rank(head);break; //排序case 6: add(head);break; //增加记录case 7: del(head);break; //删除记录default :printf("您输入错误!\n");}}while(cmd!=0);}因为是C语言版的要严格按照样子输入哦要不然就会出现不可预料的结果。

「C语言-学生成绩管理系统-链表实现-源码」

「C语言-学生成绩管理系统-链表实现-源码」

#include<stdio.h>//标准输入输出#include <malloc.h>//内存分配#include <stdlib.h>#include<string.h>/*####说明####2014.12.28修改内容:修改了大量bug,加入了姓名项v1.6简单学生管理系统蔚蓝之链编写本人是C语言初学者,初学C语言没几个月,程序写的"很笨",不喜勿喷^_^vc++6.0编译无error,无warning已实现功能:添加学生,列出学生信息列表,删除学生,退出,学号重复检查,排序功能,多科成绩录入(求平均成绩,及总平均成绩),保存记录,读取记录,修改功能;待实现功能:查询......2014.12.1创建文件,开始编写,增加添加学生函数,增加列出学生函数,增加删除学生函数,退出版本1.02014.12.2修改内容:增加学号重复检查函数,修复显示内容时程序终止,输出列表函数优化,添加学生函数优化 1.12014.12.3~2014.12.4修改内容:增加排序函数,删除函数内部优化,main函数内部改动,添加学生函数优化1.22014.12.5~2014.12.7修改内容:增加多科目录入,添加函数优化,新增总成绩与平均成绩显示,排序函数优化,输出函数改动1.3,更新到此告一段落,继续学习去(^_^)2014.12.9~2014.12.13修改内容:新增保存函数,读取函数,主程序修改,新增链表清除函数1.42014.12.14修改内容:新增修改函数,新增宏定义MAX_SCORE and MAX_SNO,方便程序的修改,修改程序中所有warning,一些bug修正1.5*///常量定义区+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#define bool int //由于C语言中不存在bool型,所以这里把它定义成int型#definetrue 1 //同上#define false 0 //↑#define LEN sizeof(struct ryb) //动态内存分配空间大小#define DATAFILE "DATA"//数据保存文件名#defineMAX_SCORE150//最高分数上限值#define MAX_SNO200 //最多录入学生上限值,即能输入的最大学号数//END常量定义============================================================================================================//声明函数=================================================================================================================struct ryb* del_item_ryb (struct ryb *head,intsno,int * del_message);//删除指定学号节点(链表头,欲删除学号,处理结果(1为删除成功,0为删除失败)),返回删除后的链表头structryb * create_item_ryb (struct ryb *head);//向指定的链表添加学生,并返回链表头voidput_ryb (struct ryb * head);//输出学号及成绩(欲输出链表头)bool is_sno(struct ryb*head, int sno );//判断指定学号是否存在,如存在返回tru e,不存在返回false(链表头,欲判断学号)struct ryb * order(struct ryb *head, enumordertypetype,intfs);//排序函数;(链表头,排序方式(asc或desc),排序类型(1为按学号,2为按总成绩))bool save_data(struct ryb * head);//保存链表数据函数(欲保存链表头)struct ryb *read_data(void);//读取数据到链表,并返回链表头void clear(struct ryb* head);//清除函数,清除指定链表所有数据,释放内存空间void amend_ryb(struct ryb * head,int sno);//修改函数,修改指定学号学生成绩信息(链表头,要修改成绩的学生学号)structryb {//定义链表数据结构intsno; //学号ﻩchar name[9]; //姓名int chinese; //语文ﻩint math; //数学ﻩint english; //英语int clanguage; //C语言ﻩinttiyu; //体育int score; //总成绩ﻩstruct ryb *next;};enum ordertype{//定义排序枚举类型asc,desc};//性感的分割线$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$主程序$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$int main ( void ){struct ryb * head,* temp_h;//链表头,临时链表boolexit=false;short intvalue;//接受输入信息1,2,3,41表示添加信息,2显示信息,3删除信息,4排序,5退出int sno, del_message=0;//学号,删除函数处理结果(1为删除成功,0为删除失败)intpxfs,pxlx;//排序方式,排序类型(方式asc\desc);(类型1学号,2成绩)char is_quit;//表示是否退出,y或Y表示退出,否则不退出ﻩchar is_save;//表示是否保存数据,y或Y表示保存,否则不保存char is_read;//表示是否读取数据,y或Y表示读取,否则不读取ﻩbool ssave;//表示是否保存成功,true表示成功,false表示保存失败ﻩint amend_sno;//表示要修改的学号head= (struct ryb*)malloc(LEN);//创建初始链表head->sno=0;//链表赋初值ﻩhead->next = NULL;ﻩdoﻩ{printf("蔚蓝学生管理系统v1.6(C语言版) \n\n");printf("①添加学生\n②显示成绩列表\n③删除学生\n④排序\n⑤保存数据\n⑥读取数据\n⑦修改\n⑧退出系统\n\n");ﻩprintf("等待命令输入:");fflush(stdin);//清空键盘缓冲区scanf("%d",&value);if(value== 1)//添加ﻩ{head=create_item_ryb(head);//添加信息ﻩprintf("录入信息结束!\n");system("pause");}else if (value == 2)//显示ﻩ{put_ryb(head); //显示信息ﻩﻩsystem("pause");ﻩ}else if(value== 3)//删除ﻩ{printf("请输入要删除的学生学号:");ﻩfflush(stdin);//清空键盘缓冲区ﻩﻩscanf("%d",&sno);ﻩhead = del_item_ryb(head,sno,&del_message);ﻩ//删除ﻩif(del_message== 1){ﻩﻩprintf("删除成功!!!\n");ﻩ}ﻩﻩelse{ﻩﻩprintf("删除失败!!!\n");ﻩ}ﻩsystem ("pause");ﻩ}else if(value== 4)//排序ﻩ{r:ﻩﻩprintf ("请请输入排序方式(1升序,2降序):");ﻩfflush(stdin);ﻩscanf("%d",&pxfs);ﻩﻩprintf("请输入排序类型(1按学号,2按成绩):");ﻩfflush(stdin);ﻩscanf("%d",&pxlx);if(pxfs >2 || pxfs<0 || pxlx>2|| pxlx<0)ﻩﻩ{ﻩﻩprintf("排序方式或排序类型输入不符合规定!!!请重新输入!!!\n");system ("pause");ﻩﻩgoto r;}ﻩif(pxfs==1)ﻩ{ﻩhead=order(head, asc,pxlx);}ﻩelse {ﻩﻩhead=order(head, desc,pxlx);ﻩﻩ}ﻩprintf ("排序完成!!!\n");ﻩ system("pause");ﻩ}elseif(value== 5)//保存数据{ﻩﻩis_save= 'N';ﻩprintf("您是否要保存当前修改过的学生数据,以前的数据将被覆盖!\n(Y\\N):");ﻩﻩfflush(stdin);ﻩﻩscanf("%c",&is_save);ﻩif(is_save =='Y' || is_save == 'y')ﻩ{ﻩﻩssave = save_data(head);ﻩﻩif(ssave == true)ﻩﻩ{ﻩﻩﻩprintf ("当前数据已成功保存到磁盘!\n");system("pause");ﻩﻩ}else{ﻩﻩprintf("保存失败或没有数据!\n");ﻩﻩsystem("pause");ﻩﻩ}}ﻩﻩelseﻩ{ﻩprintf ("您取消了保存数据操作!\n");ﻩﻩsystem("pause");}ﻩ}elseif(value==6)//读取数据ﻩ{is_read ='N';printf("您是否要读取磁盘数据,执行此操作将覆盖当前数据,是否继续?\n (Y\\N):");fflush(stdin);ﻩscanf("%c", &is_read);if(is_read =='Y'||is_read =='y')ﻩ{ﻩtemp_h =read_data();ﻩﻩﻩif(temp_h== NULL)ﻩﻩ{ﻩprintf ("数据读取失败!\n");ﻩsystem("pause");ﻩ}else{ﻩﻩﻩclear(head);//清空当前链表,释放空间ﻩﻩﻩhead =temp_h;//读取新链表ﻩﻩprintf("数据读取成功!\n");ﻩsystem("pause");ﻩ}ﻩ}ﻩﻩelseﻩ{ﻩprintf("您取消了数据读取操作!\n");ﻩsystem ("pause");ﻩ}ﻩ}else if(value ==7)ﻩ{ﻩﻩamend_sno=0;ﻩprintf("请输入要修改的学生学号:");fflush(stdin);ﻩﻩscanf("%d",&amend_sno);ﻩif(amend_sno>0&& amend_sno <= MAX_SNO){ﻩamend_ryb(head,amend_sno);}ﻩﻩelse{ﻩﻩprintf ("学号输入不合法,学号为1-%d之间的数包括(1,%d)!!!\n",MAX_SNO,MAX_SNO);ﻩﻩsystem("pause");ﻩﻩcontinue;ﻩ}}elseif(value== 8)//退出ﻩ{printf("您确定要退出蔚蓝学生成绩管理系统吗?(Y\\N):");ﻩfflush(stdin);ﻩﻩscanf("%c",&is_quit);ﻩif(is_quit== 'Y'|| is_quit =='y')ﻩ{exit = true;ﻩprintf("感谢使用蔚蓝学生成绩管理系统,再见!\n");ﻩﻩsystem("pause");ﻩﻩ}ﻩﻩ}ﻩelse{printf("请输入1-7之间的数!!!\n");ﻩsystem("pause");}system("cls");}while(exit==false);return 0;}//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$主程序END$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$//函数定义#if(1)struct ryb *del_item_ryb (struct ryb*head, int sno,int*messag e)//删除指定学号节点(链表头,欲删除学号,处理结果(1为删除成功,0为删除失败)),返回删除后的链表头{structryb * p,* p1;p =head;ﻩdo{ﻩﻩﻩif(p->sno==sno){ﻩﻩif(p == head)//如果第一个为要删除的值ﻩ{ﻩﻩﻩhead = head->next;//修改链表头ﻩﻩﻩﻩ//printf("已成功修改头指针sno=%d\n",head->sno);ﻩ}ﻩﻩelseﻩ{ﻩﻩﻩﻩp1->next= p->next;//将链表节点指向要删除的链表节点的下一节点ﻩﻩfree(p);//释放已删除的链表节点内存ﻩﻩﻩ}ﻩﻩﻩ*message = 1;ﻩbreak;ﻩﻩ}p1 = p;//保存当前链表节点ﻩp = p->next;ﻩif(p->next==NULL && p->math >=0 && p->math<=MAX_SNO)ﻩﻩ{ﻩﻩ*message =0;ﻩﻩ}ﻩ}while(p->next&& p->math>=0&& p->math <= MAX_SNO);return head;ﻩ}#endifstructryb* create_item_ryb(struct ryb*head) //向指定的链表添加学生,并返回链表头{ﻩstruct ryb *p1;inti=1;//i表示学生数ﻩint tempsno;//临时学号ﻩint scorearr[5],n;//分数数组,循环值char tempname[9];//临时姓名printf("提示:当学号为0时则终止添加,并返回主界面,姓名长度不能超过4个字\n\n");//输出提示信息p1=head;while (p1->next != NULL)//寻找链表尾,找到后将p1指向链表尾以接受学生信息的添加ﻩ{ﻩp1 =p1->next;ﻩi++;ﻩ}do {ﻩﻩp1->sno =0;sno:ﻩprintf("请输入学生%d学号与姓名[格式:学号,姓名]:",i);ﻩﻩfflush(stdin);//清空键盘缓冲区ﻩﻩif(scanf("%d,%s",&tempsno,&tempname) == 2)ﻩﻩ{ﻩ;}ﻩﻩelseﻩﻩ{ﻩﻩprintf("输入格式错误!请重新输入T_T\n");ﻩsystem("pause");ﻩgoto sno;ﻩ}ﻩif(tempsno!= 0){ﻩﻩif(is_sno(head,tempsno) == false)//判断学号是否存在ﻩﻩﻩ{ﻩp1->sno= tempsno;ﻩﻩ}ﻩﻩelse {ﻩprintf ("学号[%d]已存在!!!\n",tempsno);ﻩﻩgoto sno;ﻩ}}ﻩelse{ﻩcontinue;ﻩﻩ}printf("---------------------------------------------\n");ﻩprintf("请输入学生%d成绩(语文,数学,英语,C语言,体育,以逗号分隔):",i);ﻩﻩfor(n=0;n<=4;n++)//成绩数组赋初值ﻩ{ﻩﻩscorearr[n]=0;ﻩ}fflush(stdin);//清空键盘缓冲区ﻩﻩscanf("%d,%d,%d,%d,%d",&scorearr[0],&scorearr[1],&scorearr[2],&scorearr[3],&scorearr[4]);ﻩprintf("*********************************************\n");//检测输入合法性ﻩif(p1->sno== 0)ﻩﻩ{ﻩ;}ﻩelseif(p1->sno < 1 ||p1->sno>MAX_SNO)//判断学号是否合法,(1~200){ﻩprintf("学号输入不合法,学号为1-%d之间的数包括(1,%d)!!!\n",MAX_SNO,MAX_SNO);ﻩﻩﻩsystem("pause");ﻩcontinue;ﻩ}else//判断成绩合法性ﻩ{ﻩfor(n=0;n<=4;n++)//检测成绩录入合法性ﻩﻩﻩ{ﻩﻩif (scorearr[n]<0 ||scorearr[n]>MAX_SCORE)ﻩﻩ{ﻩﻩprintf("成绩输入不合法或成绩数值输入错误,各科成绩应为0-%d之间的数包括(0,%d)!!!\n",MAX_SCORE,MAX_SCORE);ﻩﻩﻩsystem("pause");ﻩﻩﻩcontinue;ﻩﻩﻩ}ﻩ}ﻩﻩﻩp1->sno= tempsno;p1->chinese= scorearr[0];p1->math = scorearr[1];ﻩﻩﻩp1->english= scorearr[2];ﻩﻩp1->clanguage = scorearr[3];ﻩﻩp1->tiyu =scorearr[4];ﻩstrcpy(p1->name ,tempname);ﻩ//求总成绩ﻩﻩp1->score=scorearr[0]+scorearr[1]+scorearr[2]+scorearr[3]+scorearr[4];ﻩﻩﻩﻩ}ﻩif(p1->sno!= 0){p1->next =(struct ryb*)malloc(LEN);//create一个新节点给p1->nextp1 = p1->next;//将新节点地址给p1p1->next = NULL;//↑ﻩﻩ}else{ﻩﻩp1->sno =0;ﻩ}i++;ﻩ}while(p1->sno!= 0);//判断学号是否为0;为0退出添加ﻩreturnhead;}#if(1)void put_ryb(struct ryb* head)//输出学号及成绩(欲输出链表头){struct ryb *pryb = head;struct ryb zcj;//总成绩int student_num =0;//学生人数ﻩ//初始化总成绩结构体zcj.chinese = 0;zcj.clanguage= 0;ﻩzcj.english= 0;ﻩzcj.math=0;ﻩzcj.tiyu = 0;//初始化ENDﻩsystem("cls");printf (" --------------\n");printf("|某班学生成绩表|\n");printf("--------------\n");printf ("-------- ---- ---- ------------- --------------\n");printf("|学号||姓名||语文| |数学| |英语| |C语言||体育||总成绩| |平均成绩|\n");ﻩprintf("-------- ---- ------------- ---- ------ --------\n");//8,8,8,8,9,8,10,12do{ﻩif(pryb->sno != 0&&pryb->math>= 0 && pryb->math <=MAX_SNO)//输出成绩ﻩ{ﻩprintf("%-8d%-8s%-8d%-8d%-8d%-9d%-8d%-10d%-12d\n",pryb->sno,pryb->name,pryb->chinese,pryb->math,ﻩ pryb->english,pryb->clanguage,pryb->tiyu,pryb->score,pryb->score / 5);zcj.chinese = zcj.chinese +pryb->chinese;//计算各科总成绩ﻩﻩzcj.clanguage = zcj.clanguage+pryb->clanguage ;ﻩﻩzcj.english=zcj.english + pryb->english;ﻩﻩzcj.math= zcj.math + pryb->math;ﻩﻩzcj.tiyu =zcj.tiyu+ pryb->tiyu ;ﻩstudent_num++;//记录总学生人数,表示链表不为空:ﻩpryb=pryb->next;}ﻩ}while(pryb->next &&pryb->math >= 0 &&pryb->math<= MAX_SNO);if (student_num >=1)//判断链表是否为空ﻩ{ﻩprintf ("\n\n[总平均成绩]:(语文:%d,数学:%d,英语:%d,C语言:%d,体育:%d)\n",zc j.chinese/student_num, zcj.math / student_num,ﻩﻩzcj.english / student_num,zcj.clanguage /student_num , zcj.tiyu/ student_num);//输出总平均成绩}else{ﻩprintf ("没有可以输出列表!\n\n");}ﻩ}#endifbool is_sno(struct ryb* head,int sno)//判断学号是否存在(头指针,学号),如学号存在返回true,不存在返回false{structryb *p;ﻩp=head;ﻩdo {ﻩif(p->sno ==sno)ﻩ{ﻩﻩreturn true;ﻩ}ﻩﻩif (p->next != NULL){ﻩﻩp = p->next;ﻩ}}while(p->next!=NULL);ﻩreturnfalse;}//排序函数排序使用冒泡算法struct ryb* order(struct ryb *head,enumordertype type, intfs)//排序函数;(链表头,排序方式(asc或desc),排序类型(1为按学号,2为按总成绩)){structryb*p,*rp,*ptemp,*rph;//要排序的链表,要返回的链表,临时排序链表,要返回的链表头int max,min;ﻩint pro_mess;//删除函数处理结果1,0if(head->sno==0)ﻩ{ﻩreturn head;}p = head;ﻩmax =0,min= 0;ﻩrp=(structryb *) malloc(LEN);//create一个新节点给rp ﻩrph = rp;do{ptemp = p;if(fs == 1)//按学号ﻩ{ﻩﻩﻩmax=ptemp->sno;//赋初值ﻩmin= ptemp->sno;ﻩ}ﻩelse { //按成绩ﻩmax=ptemp->sno;ﻩﻩmin= ptemp->score;ﻩmax = ptemp->score;ﻩﻩ}ﻩrp->sno= ptemp->sno;ﻩrp->score=ptemp->score;ﻩrp->tiyu =ptemp->tiyu;ﻩrp->english =ptemp->english;ﻩrp->chinese= ptemp->chinese ;rp->math =ptemp->math ;ﻩrp->clanguage=ptemp->clanguage ;ﻩﻩstrcpy(rp->name , ptemp->name) ;do{if(type == desc)//降序ﻩ{if(fs==1)//按学号ﻩ{ﻩﻩﻩif(ptemp->sno >max)ﻩﻩﻩﻩ{ﻩﻩﻩmax = ptemp->sno;ﻩﻩrp->sno= ptemp->sno ;ﻩﻩﻩﻩﻩrp->score =ptemp->score ;ﻩﻩﻩrp->tiyu =ptemp->tiyu ;ﻩﻩﻩrp->english = ptemp->english;ﻩﻩrp->chinese=ptemp->chinese ;ﻩﻩrp->math= ptemp->math;ﻩﻩﻩﻩrp->clanguage = ptemp->clanguage ;strcpy(rp->name, ptemp->name);}ﻩﻩﻩ}ﻩelse if (fs ==2)//按成绩ﻩﻩ{ﻩif(ptemp->score > max)ﻩ{ﻩﻩmax = ptemp->score;ﻩﻩrp->sno= ptemp->sno;ﻩﻩrp->score =ptemp->score;ﻩﻩﻩrp->tiyu= ptemp->tiyu ;ﻩﻩﻩﻩrp->english =ptemp->english;ﻩﻩﻩrp->chinese =ptemp->chinese;ﻩﻩﻩrp->math=ptemp->math ;ﻩﻩrp->clanguage = ptemp->clanguage;ﻩﻩﻩstrcpy(rp->name ,ptemp->name);}ﻩﻩ}ﻩﻩ}ﻩﻩif(type== asc)//升序{ﻩﻩﻩif(fs ==1)//按学号ﻩﻩ{ﻩﻩif(ptemp->sno <min)ﻩﻩﻩ{ﻩﻩmin =ptemp->sno;ﻩrp->sno = ptemp->sno;ﻩﻩﻩﻩrp->score=ptemp->score ;ﻩﻩrp->tiyu= ptemp->tiyu ;ﻩﻩﻩrp->english=ptemp->english;ﻩﻩﻩrp->chinese = ptemp->chinese;ﻩﻩrp->math = ptemp->math ;ﻩrp->clanguage = ptemp->clanguage;ﻩstrcpy(rp->name , ptemp->name);ﻩﻩ}ﻩ}ﻩelse if(fs== 2)//按成绩ﻩﻩ{ﻩﻩif(ptemp->score <min)ﻩ{ﻩﻩmin =ptemp->score;ﻩrp->sno= ptemp->sno ;ﻩﻩrp->score =ptemp->score ;ﻩﻩﻩrp->tiyu = ptemp->tiyu ;ﻩﻩﻩﻩrp->english =ptemp->english ;ﻩﻩﻩrp->chinese =ptemp->chinese ;ﻩﻩﻩrp->math= ptemp->math ;ﻩﻩrp->clanguage = ptemp->clanguage;ﻩﻩstrcpy(rp->name, ptemp->name) ;ﻩﻩﻩ}ﻩﻩ}ﻩ}ptemp=ptemp->next ;}while(ptemp->next !=NULL);p=del_item_ryb(p,rp->sno,&pro_mess);ﻩrp->next=(struct ryb*) malloc(LEN);//create一个新节点给rp->next rp = rp->next ;ﻩif(p->next==NULL){//添加链表尾信息链表尾为一个指向NULL的空结构,以表示链表结束ﻩrp->score = 0;ﻩrp->sno=0;rp->next=NULL;ﻩ}}while(p->next!= NULL);return rph;//返回排序后链表头}//排序函数END;------------------------------------------------------------------------------boolsave_data(struct ryb * head)//保存链表数据函数(欲保存链表头),成功返回true,失败返回false{ﻩFILE *fp;struct ryb * p;p= head;ﻩif (head->sno== 0)//如果链表为空ﻩ{ﻩreturn false;//返回false}ﻩfp = fopen(DATAFILE, "wb+");//打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。

c语言学生成绩治理系统(链表版)

c语言学生成绩治理系统(链表版)

#include <>#include <>#include <>#include <>#include <>#include <>#define YES 1#define NO 0typedef struct{int num;float math_score;float engl_score;float chin_score;float phy_score;float chem_score;double aver_score;double sum_score;char sex;}StudentDate;...");printf("\n\n\n\n\t\t\t┏━━━━━━━━━━┓\n");printf("\t\t\t┃┃\n");printf("\t\t\t┗━━━━━━━━━━┛\n");gotoxy(26, 7);for ( i = 0; i < 10; i++){printf("█");Sleep(100);}pHead = createListHead();readListWithFile(pHead, "");return pHead;}Student *createListHead(void){Student *pHead;pHead = (List)malloc(sizeof(Student));pHead->next = NULL;return pHead;}void readListWithFile(Student *pHead, char *file_name) {FILE *fp;Student *p1, *p2;int count, rank = 0;StudentDate dat;char stu_name[20];fp = fopen(file_name, "r");if (fp == NULL){fp = fopen(file_name, "w");fclose(fp);return;}fseek(fp, 0L, 2);count = ftell(fp);p1 = pHead;fp = fopen(file_name, "r");while (!feof(fp)){p2 = (List)malloc(sizeof(Student));fscanf(fp, "%d%s %c%f%f%f%f%f\n", &p2->, p2->name, &p2->, &p2->, &p2->, &p2->, &p2->, &p2->;p2-> = (double)(p2-> + p2-> + p2-> +p2-> + p2->;p2-> = p2-> / 5;p2->next = NULL;p1->next = p2;p1 = p2;if (ftell(fp) == count){break;}}f %.1f %.1f %.1f %.1f\n", p1->, p1->name, p1->, p1->,p1->, p1->, p1->, p1->;printf("是不是继续添加?(Y/N)");bum = getch();if (bum == 'n' || bum == 'N'){break;}}f %.1f %.1f %.1f %.1f\n", pHead->, pHead->name, pHead->, pHead->,pHead->, pHead->, pHead->, pHead->;pHead = pHead->next;}fclose(fp);}void alterStudentInfo(Student *pHead){int bum, count = 0, j = 0;int num;char student_name[20];Student *p1 = pHead->next;system("title 学生成绩统计系统-修改");f,没有达抵达到平均分的学生有┃\n", aver_score[0]);printf(" ┣━━━┳━━━━┳━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━┫\n");printf(" ┃学号┃姓名┃性别┃语文┃数学┃英语┃化学┃物理┃平均分┃总分┃名次┃\n");printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");while (p1){if (p1-> < aver_score[0]){if (bad == 0){printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}else{printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}bad = 1;}p1 = p1->next;}bad = 0;p1 = pHead->next;printf(" ┣━━━┻━━━━┻━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━┫\n");printf(" ┃\t\t\t数学的平均分为:%.1f,没有达抵达到平均分的学生有┃\n", aver_score[1]);printf(" ┣━━━┳━━━━┳━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━┫\n");printf(" ┃学号┃姓名┃性别┃语文┃数学┃英语┃化学┃物理┃平均分┃总分┃名次┃\n");printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");while (p1){if (p1-> < aver_score[1]){if (bad == 0){printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}else{printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}bad = 1;}p1 = p1->next;}bad = 0;p1 = pHead->next;printf(" ┣━━━┻━━━━┻━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━┫\n");printf(" ┃\t\t\t英语的平均分为:%.1f,没有达抵达到平均分的学生有┃\n", aver_score[2]);printf(" ┣━━━┳━━━━┳━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━┫\n");printf(" ┃学号┃姓名┃性别┃语文┃数学┃英语┃化学┃物理┃平均分┃总分┃名次┃\n");printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");while (p1){if (p1-> < aver_score[2]){if (bad == 0){printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}else{printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}bad = 1;}p1 = p1->next;}bad = 0;p1 = pHead->next;printf(" ┣━━━┻━━━━┻━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━┫\n");printf(" ┃\t\t\t化学的平均分为:%.1f,没有达抵达到平均分的学生有┃\n", aver_score[3]);printf(" ┣━━━┳━━━━┳━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━┫\n");printf(" ┃学号┃姓名┃性别┃语文┃数学┃英语┃化学┃物理┃平均分┃总分┃名次┃\n");printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");while (p1){if (p1-> < aver_score[3]){if (bad == 0){printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}else{printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}bad = 1;}p1 = p1->next;}bad = 0;p1 = pHead->next;printf(" ┣━━━┻━━━━┻━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━┫\n");printf(" ┃\t\t\t物理的平均分为:%.1f,没有达抵达到平均分的学生有┃\n", aver_score[4]);printf(" ┣━━━┳━━━━┳━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━┫\n");printf(" ┃学号┃姓名┃性别┃语文┃数学┃英语┃化学┃物理┃平均分┃总分┃名次┃\n");printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");while (p1){if (p1-> < aver_score[4]){if (bad == 0){printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}else{printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}bad = 1;}p1 = p1->next;}printf(" ┗━━━┻━━━━┻━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━┛\n");printf("\t\t\t\t\t\t该班一共%d个人!", count);}else{if (bum == 2){bad = 0;printf("\n\n ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");printf(" ┃\t\t\t\t语文成绩大于90分或小于60的学生有┃\n");printf(" ┣━━━┳━━━━┳━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━┫\n");printf(" ┃学号┃姓名┃性别┃语文┃数学┃英语┃化学┃物理┃平均分┃总分┃名次┃\n");printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");p1 = pHead->next;while (p1){if (p1-> < 60 || p1-> >= 90){if (bad == 0){printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}else{printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}bad = 1;}p1 = p1->next;}bad = 0;printf(" ┣━━━┻━━━━┻━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━┫\n");printf(" ┃\t\t\t\t数学成绩大于90分或小于60的学生有┃\n");printf(" ┣━━━┳━━━━┳━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━┫\n");printf(" ┃学号┃姓名┃性别┃语文┃数学┃英语┃化学┃物理┃平均分┃总分┃名次┃\n");printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");p1 = pHead->next;while (p1){if (p1-> < 60 || p1-> >= 90){if (bad == 0){printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}else{printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}bad = 1;}p1 = p1->next;}bad = 0;printf(" ┣━━━┻━━━━┻━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━┫\n");printf(" ┃\t\t\t\t英语成绩大于90分或小于60的学生有┃\n");printf(" ┣━━━┳━━━━┳━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━┫\n");printf(" ┃学号┃姓名┃性别┃语文┃数学┃英语┃化学┃物理┃平均分┃总分┃名次┃\n");printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");p1 = pHead->next;while (p1){if (p1-> < 60 || p1-> >= 90){if (bad == 0){printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}else{printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}bad = 1;}p1 = p1->next;}bad = 0;printf(" ┣━━━┻━━━━┻━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━┫\n");printf(" ┃\t\t\t\t化学成绩大于90分或小于60的学生有┃\n");printf(" ┣━━━┳━━━━┳━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━┫\n");printf(" ┃学号┃姓名┃性别┃语文┃数学┃英语┃化学┃物理┃平均分┃总分┃名次┃\n");printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");p1 = pHead->next;while (p1){if (p1-> < 60 || p1-> >= 90){if (bad == 0){printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃%┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}else{printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}bad = 1;}p1 = p1->next;}bad = 0;printf(" ┣━━━┻━━━━┻━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━┫\n");printf(" ┃\t\t\t\t物理成绩大于90分或小于60的学生有┃\n");printf(" ┣━━━┳━━━━┳━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━┫\n");printf(" ┃学号┃姓名┃性别┃语文┃数学┃英语┃化学┃物理┃平均分┃总分┃名次┃\n");printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");p1 = pHead->next;while (p1){if (p1-> < 60 || p1-> >= 90){if (bad == 0){printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}else{printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}bad = 1;}p1 = p1->next;}printf(" ┗━━━┻━━━━┻━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━┛\n");}else{if (bum == 3){return;}else{statisStudentInfo(pHead);}}}getch();}int statisMenu(void){int bum;system("CLS");printf("\n\n\n");printf("\t\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");printf("\t\t┃以什么方式统计学生信息?┃\n");printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");printf("\t\t┃ 1 按平均分┃\n");printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");printf("\t\t┃ 2 按是不是合格┃\n");printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");printf("\t\t┃ 3 返回主菜单┃\n");printf("\t\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");printf("请按键选择:");bum = (int)(getch() - '0');system("CLS");return bum;}void inputData(Student *pHead, Student *node){Student *p1 = node, *p2, *p3 = pHead;system("CLS");printf("\n\n\t请依次输入学生的学号、姓名、性别、语文、数学、英语、化学、物理成绩\n");printf("\t注意:姓名不能有空格,性别男用M表示,女佣W表示,\n\t各科成绩应该大于0小于100,输入数据时请用空格隔开\n");scanf("%d%s %c%f%f%f%f%f", &p1->, p1->name, &p1->, &p1->, &p1->, &p1->, &p1->, &p1->;// 判定输入的学号是不是已经存在p2 = p3->next;while (1){if (p2 == NULL){break;}if (p2-> == p1-> && p2 != node){printf("该学号已存在,请从头输入学号:");scanf("%d", &p1->;p2 = p3->next;}else{p2 = p2->next;}}//性别是不是合法while (1){if (p1-> != 'W'&& p1-> != 'M'){p1-> = getchar();printf("性别输入不合法,请从头输入: ");p1-> = getchar();}else{break;}}//成绩是不是合法while (1){if (p1-><0 || p1-> >100){printf("语文成绩输入不合法,请从头输入:");scanf("%f", &p1->;}if (p1-><0 || p1-> >100){printf("数学成绩输入不合法,请从头输入:");scanf("%f", &p1->;}if (p1-><0 || p1-> >100){printf("英语成绩输入不合法,请从头输入:");scanf("%f", &p1->;}if (p1-><0 || p1-> >100){printf("化学成绩输入不合法,请从头输入:");scanf("%f", &p1->;}if (p1-><0 || p1-> >100){printf("物理成绩输入不合法,请从头输入:");scanf("%f", &p1->;}if (p1-> >= 0 && p1-> <= 100 && p1-> >= 0&& p1-> <= 100&& p1-> >= 0 && p1-> <= 100&& p1-> >= 0 && p1-> <= 100&& p1-> >= 0 && p1-> <= 100){break;}}p1-> = (double)(p1-> + p1-> + p1-> +p1-> + p1->;p1-> = p1-> / 5;}。

学生成绩管理系统 c语言 链表

学生成绩管理系统 c语言 链表

程序代码如下:#include<stdio.h>#include<malloc.h>#define LEN sizeof(struct student)struct student \\首先,建立一个结构体,包括成员学号和3个成绩{int num;float s1;float s2;float s3;struct student * next; \\ 指针来创建单向链表};int n; \\ n是链表中节点的数目struct student * creat() \\这是链表的创建函数,用于录入学生成绩{struct student *head,*p1,*p2;n=0;p1=p2=(struct student*)malloc(LEN);scanf("%d,%f,%f,%f",&p1->num,&p1->s1,&p1->s2,&p1->s3);head=NULL;while(p1->num!=0){n=n+1;if(n==1) head=p1;else p2->next=p1;p2=p1;p1=(struct student*)malloc(LEN);scanf("%d,%f,%f,%f",&p1->num,&p1->s1,&p1->s2,&p1->s3);}p2->next=NULL;return (head);}void print (struct student * head) \\ 这是链表的输出,用于查看整个学生成绩{void menufunction(struct student * p3);struct student * p;printf("\n学生成绩如下:\n");printf("学号语文数学英语\n");p=head;if(head!=NULL)do{printf("%d %5.1f %5.1f %5.1f\n",p->num,p->s1,p->s2,p->s3);p=p->next;}while(p!=NULL);menufunction(head); \\菜单功能的一个函数,用它来控制整个菜单界面的进行}struct student * del(struct student * head, int num) \\ del函数用作删除节点{void menufunction(struct student * p3);struct student *p1, *p2;if(head==NULL){printf("\nlist null! \n");return(head);}p1=head;while(num!=p1->num && p1->next!=NULL){p2=p1;p1=p1->next;}if(num==p1->num){if(p1==head) head=p1->next ;else p2->next=p1->next ;printf("delete:%d\n",num);n=n-1;}else printf("%d can't been found!\n",num);return(head);menufunction(head);}struct student *insert (struct student * head,struct student * stud) \\ insert函数用作创建节点{void menufunction(struct student * p3);struct student * p0,*p1,*p2;p1=head;p0=stud;if(head==NULL){head=p0;p0->next =NULL;}else {while((p0->num>p1->num)&&(p1->next!=NULL)){p2=p1; p1=p1->next ;}if(p0->num <=p1->num){if(head==p1) head=p0;else p2->next =p0;p0->next =p1;}else {p1->next=p0;p0->next=NULL;}}n=n+1;menufunction(head);return(head);}void x() \\用于界面制作的函数{ printf(" \n");printf("**********************************************************\n");}void s(struct student * head,int nu) \\这是一个查找的函数{struct student *p;void menufunction(struct student * p3);for(p=head;p->next!=NULL;p=p->next ){if(p->num==nu){printf("%d %5.1f %5.1f %5.1f\n",p->num,p->s1,p->s2,p->s3); break;}}if(p->num==nu)printf("%d %5.1f %5.1f %5.1f\n",p->num,p->s1,p->s2,p->s3); menufunction(head);}void menufunction(struct student * p3) \\用作界面菜单的函数{struct student * stu;int del_num,i,j; \\创建一个菜单,具有良好界面printf("**********************************************************\n"); printf(" 1.查看所有学生成绩\n");printf(" 2.删除个人成绩\n");printf(" 3.增加个人成绩\n");printf(" 4.查找个人成绩\n");printf(" 0.返回\n");printf("请选择要执行的功能0~4:");scanf("%d",&i);switch(i) \\wsitch语句来控制数字功能{case 1: x();print(p3);break;case 2: x(); printf("\n输入要删除的学号(如110):");scanf("%d",&del_num);while(del_num!=0){p3=del(p3,del_num);print(p3);printf("确认退出0:");scanf("%d",&del_num);} break;case 3: x(); printf("\n输入要插入的信息(如110,1,2,3):");stu=(struct student * )malloc(LEN);scanf("%d,%f,%f,%f",&stu->num,&stu->s1,&stu->s2,&stu->s3);while(stu->num!=0){p3=insert(p3,stu);print(p3);printf("确认退出0:");stu=(struct student * )malloc(LEN);scanf("%d,%f,%f,%f",&stu->num,&stu->s1,&stu->s2,&stu->s3);}break;case 4: x(); printf("输入要查找的学号(如110):");scanf("%d",&j);printf("学号语文数学英语\n");s(p3,j);break;case 0 : x(); printf("返回\n");break;default : printf("error!\n"); break;}}void main() \\main函数{struct student * head,* p3;printf("**************欢迎来到学生成绩管理系统**************:\n"); printf("请先输入学生成绩(如110,1,2,3):\n");head=creat();p3=head;menufunction(p3);printf(" 0.退出\n");}测试结果如图:先录入了5个学生的成绩良好的操作界面查看所有成绩(输出整个链表)现在删除学号为105的学生成绩,并查看成绩(增加个人成绩类似)查找个人成绩,输入学生学号,输出其成绩选0 返回菜单,再输入,则退出系统。

学生成绩管理系统C语言(附完整源代码)

学生成绩管理系统C语言(附完整源代码)

学生成绩管理系统C语言(附完整源代码)学生成绩管理系统C语言(附完整源代码)课程设计报告学生成绩管理系统院系:专业:班级:完成日期: 2009年1月03日设计题目:学生成绩管理系统目录1、题目描述2、算法设计/设计思想3、结构框图、各模块的功能描述4、主体思想:5、程序的,,,流程图6、源代码1.题目描述设计一个简单的学生成绩管理系统,要求有简单的界面,程序段要分清模块,该程序应该:(1)输入学生成绩,求总分,平均分,以及排序。

(2)查询学生单科成绩,总分和平均成绩;(3)添加、修改学生成绩具有下列功能:(4)实现保存与查看功能2.算法设计/设计思想利用二维数组——定义stu[][]存储学生学号、各科成绩,总分,平均分,名次,利用文件来存储,读取数据。

详细合作是::负责inputx(),print1(),input();:卖力文件的储备和读取,main(),System(),Idea()和各挪用函数之间的连;:卖力find1(),find2(),find3(),find31(),Find();:负责del(),add(),change1(),Change();前期调试由小组配合卖力。

3.结构框图、各模块的功能描述3.1建立成就表3.1.1 input()功用是输退学生的信息,便于当前的查询、欣赏。

3.2增加3.2.1 add( )功用是向inputy()增加新的内容。

3.3.2 chance( )对单科成绩进行修改。

3.3查询3.3.1可根据学号,科目,名次,进行查询。

3.3.2查询内容包孕:该学生的各课成就、、均匀分。

3.4删除3.4.1能够输退学号删除一逻辑学生的一课成就。

3.5浏览成绩单3.5.1通过此print1()可以查看所有学生的各课成绩、总分、平均分和名次。

3.6文件()3.6.1保存以上所输入的信息以达到既是关闭窗口信息也不会丢失信息的目的。

3.6.2随时打开,修改文件。

3.7.退出功用是退出主菜单退出系意见评述功能菜单统输入增加及改查找功用退出功用菜单成就功用查输排查找学学添修某某生生加改XXX某成成就绩科绩绩绩成就按按按名学科次号目查查查找找找四、主体思想:1、斟酌到此步伐量大代码多,以是用函数挪用,分几小我去完成。

学生成绩管理系统C(链表)语言

学生成绩管理系统C(链表)语言

学⽣成绩管理系统C(链表)语⾔#include"stdio.h"#include"stdlib.h"#include"string.h"//⽤于调⽤⼀些函数struct person {char name[20];int ID;int chinese;int english;int math;struct person *next; //连接处的指针}; //由于create⾥⾯就有initialize所以先把initialize放在前⾯void initialize(struct person *p, int num) { //初始化链表⾥⾯的值printf("innitialize person %d\n name is:", num); //num⽤于计⼊输⼊的第⼏个同学scanf_s("%s", &p->name, sizeof(p->name));getchar();printf("ID:");scanf_s("%d", &p->ID);getchar();printf("chinese:");scanf_s("%d", &p->chinese);getchar();printf("math:");scanf_s("%d", &p->math);getchar();printf("english:");scanf_s("%d", &p->english);getchar();}struct person *create(int len) {int num = 0;struct person *h = 0, *c, *pre = 0;while (num < len) {c = (struct person*)malloc(sizeof(struct person)); //malloc取内存 sizeof为这个内存的⼤⼩然后转化成指针if (num == 0) { h = c; pre = c; } // 如果num=0 h存下了⾸地址为以后拿做准备c->next = NULL;if (num) {pre->next = c; //pre为前⼀块内存的地址把后⼀块的⾸地址赋给前⼀块的尾pre = c; //收尾连接后 pre指前⼀块的功能就完成了然后再指向现在的内存为下⼀次拿内存、赋地址做准备}initialize(c, num); //每取⼀块地址就去输⼊⼀次++num;}return h;}void traverse(struct person *head) {int index = 1; // ⽤于计数第⼏个学⽣while (head != NULL) { //同样⼀直到后⾯没有地址结束printf("name is: %s\t ID is:%d\t chinese is:%d\t englishi is:%d\t math is:%d\n", head->name, head->ID, head->chinese, head->english, head->math); head = head->next; //前⼀个输完后就要指向下⼀块地址++index;}}int getlength(struct person *head) {int num = 0;while (head != NULL) { //当head指向后⾯没有了它就是NULL 结束++num;head = head->next; //如果head 不是NULL ++num后要把head指针指向最后}return num;}//增加学⽣信息void append_node(struct person *h) {struct person *t = h, *p;while (t->next != NULL) {t = t->next;}p = (struct person *)malloc(sizeof(struct person));initialize(p, 0);p->next = NULL;t->next = p;traverse(h);}//删除struct person * delete_ID(struct person *head, int ID, int len) {struct person *t = head;struct person *temp;for (int i = 0; i < (len - 1); ++i) {if (i == 0) {if (head->ID == ID) { head = head->next; free(t); traverse(head); return head; }if ((t->next)->ID == ID) {temp = t->next;t->next = (t->next)->next;free(temp); traverse(head); return head;}}if (i != 0) {if ((t->next)->ID == ID) {temp = t->next;t->next = (t->next)->next;free(temp); traverse(head); return head;}t = t->next;}}return head;}//学号查询void search_ID(struct person *head, int ID) {while (head != NULL) {if (head->ID == ID) {printf("name is: %s\t ID is:%d\t chinese is:%d\t englishi is:%d math is:%d\n", head->name, head->ID, head->chinese, head->english, head->math);}head = head->next;}}//姓名查询void search_name(struct person *head, char name[20]) {while (head != NULL) {if ((strcmp(head->name, name)) == 0) { printf("name is: %s\t ID is:%d\t chinese is:%d\t englishi is:%d math is:%d\n", head->name, head->ID, head->chinese, head->english, head->math); } head = head->next;}}//指定学⽣修改void change(struct person *head, char name[20]) {while (head != NULL) {if (strcmp(head->name, name) == 0) {printf(" name is:");scanf_s("%s", &head->name, sizeof(head->name));getchar();printf("ID:");scanf_s("%d", &head->ID);getchar();printf("chinese:");scanf_s("%d", &head->chinese);getchar();printf("english:");scanf_s("%d", &head->english);getchar();printf("math:");scanf_s("%d", &head->math);getchar();}head = head->next;}traverse(head);}//数学分数平均数int average_math(struct person *head, int len) {int i = 0, sum = 0, average;struct person *t = head;while (t != NULL) {sum += t->math;t = t->next;}average = (sum / len);return average;}//英语分数平均数int average_english(struct person *head, int len) {int i = 0, sum = 0, average;struct person *t = head;while (t != NULL) {sum += t->english;t = t->next;}average = (sum / len);return average;}//语⽂分数平均数int average_chinese(struct person *head, int len) {int sum = 0, average;struct person *t = head;while (t != NULL) {sum += t->chinese;t = t->next;}average = (sum / len);return average;}//成绩区间统计int statistics_math(struct person*head, int min, int max) {int conter = 0;while (head!= NULL) {if (head->math >= min&&head->math <= max) {++conter;printf("name:%s math score:%d\n", head->name, head->math);}head = head->next;}return conter;}int statistics_chinese(struct person*head, int min, int max) {int conter = 0;while (head != NULL) {if (head->chinese >= min&&head->chinese <= max) {++conter;printf("name:%s chinese score:%d\n", head->name, head->chinese);}head = head->next;}return conter;}int statistics_english(struct person*head, int min, int max) {int conter = 0;while (head != NULL) {if (head->english >= min&&head->english <= max) {++conter;printf("name:%s english score:%d\n", head->name, head->english);}head = head->next;}return conter;}//某名学⽣的平均成绩int average_name(struct person*head, char name[20]) {int av = 0;while (head != NULL) {if (strcmp(head->name, name) == 0) { av += head->math; av += head->chinese; av += head->english; } head = head->next;}av = av / 3;return av;}//排序数学void rank_math(struct person *h, int len) {struct person *t = h, *pre = h;int i, math, chinese, english,ID;char name[20];t = t->next;for (i = 0; i < (len - 1); ++i) {while (t != NULL) {if ((t->math) >(pre->math)) {ID = t->ID; t->ID = pre->ID; pre->ID = ID;math = t->math; t->math = pre->math; pre->math = math;strcpy_s(name, t->name); strcpy_s(t->name, pre->name); strcpy_s(pre->name, name);chinese = t->chinese; t->chinese = pre->chinese; pre->chinese = chinese;english = t->english; t->english = pre->english; pre->english = english;}t = t->next;}pre = pre->next; t = pre->next;}traverse(h);}//排序语⽂void rank_chinese(struct person *h, int len) {struct person *t = h, *pre = h;int i, math, chinese, english,ID;char name[20];t = t->next;for (i = 0; i < (len - 1); ++i) {while (t != NULL) {if ((t->chinese) >(pre->chinese)) {ID = t->ID; t->ID = pre->ID; pre->ID = ID;math = t->math; t->math = pre->math; pre->math = math;strcpy_s(name, t->name); strcpy_s(t->name, pre->name); strcpy_s(pre->name, name);chinese = t->chinese; t->chinese = pre->chinese; pre->chinese = chinese;english = t->english; t->english = pre->english; pre->english = english;}t = t->next;}pre = pre->next; t = pre->next;}traverse(h);}//排序英语void rank_english(struct person *h, int len) {struct person *t = h, *pre = h;int i, math, chinese, english,ID;char name[20];t = t->next;for (i = 0; i < (len - 1); ++i) {while (t != NULL) {if ((t->english) >(pre->english)) {ID = t->ID; t->ID = pre->ID; pre->ID = ID;math = t->math; t->math = pre->math; pre->math = math;strcpy_s(name, t->name); strcpy_s(t->name, pre->name); strcpy_s(pre->name, name);chinese = t->chinese; t->chinese = pre->chinese; pre->chinese = chinese;english = t->english; t->english = pre->english; pre->english = english;}t = t->next;}pre = pre->next; t = pre->next;}traverse(h);}void release(struct person *head) {struct person *n; //需要⼀个指针存着下⼀个地址while (head != NULL) {n = head->next; //把n指向下⼀块要释放的地址free(head);head = n; //然后再把head从前⼀个地址移到下⼀个地址}}//取长度int getlen(struct person *head) {int conter = 0;struct person*t = head;while (t != NULL) {++conter;t = t->next;}return conter;}//存⼊⽂件void openfile(struct person *head, int len) {FILE *fp;struct person*t = head;errno_t err;int temp;char str[100];char s[10];if ((err = fopen_s(&fp, "D:\\学⽣信息", "w")) != 0){printf("⽂件打开错误\n");}else{printf("⽂件打开成功\n");}for (int i = 0; i < len; ++i) {strcpy_s(str, t->name);fputs("name:", fp);fputs(str, fp);fputs(": ", fp);fputs("ID:", fp);sprintf_s(s, "%d", t->ID);fputs(s, fp);fputs("", fp);sprintf_s(s, "%d", t->chinese);fputs("chinese:", fp);fputs(s, fp);fputs("", fp);sprintf_s(s, "%d", t->math);fputs("math:", fp);fputs(s, fp);fputs("", fp);sprintf_s(s, "%d", t->english);fputs("english:", fp);fputs(s, fp);fputs("\n", fp);t = t->next;}return;}void menu(struct person *head, int len) {int m = 0;int min, max;int ID = 0;int conter = 0;char name[20];while (1) {printf(" 请选择您需要的操作:\n");printf(" 0. 遍历学⽣信息\n");printf(" 1. 增加学⽣信息\n");printf(" 2. 删除学⽣信息\n");printf(" 3. 修改学⽣信息\n");printf(" 4. 按姓名查询\n");printf(" 5. 按学号查询\n");printf(" 6. 语⽂成绩在某个区间段的⼈数以及学⽣\n"); printf(" 7. 数学成绩在某个区间段的⼈数以及学⽣\n"); printf(" 8. 英语成绩在某个区间段的⼈数以及学⽣\n"); printf(" 9. 语⽂平均分\n");printf(" 10. 数学平均分\n");printf(" 11. 英语平均分\n");printf(" 12. 某个学⽣的三科平均成绩\n");printf(" 13. 按语⽂成绩从⾼到低排序\n");printf(" 14. 按数学成绩从⾼到低排序\n");printf(" 15. 按英语成绩从⾼到底排序\n");printf(" 16. 结束功能并把信息写⼊⽂件中\n");scanf_s("%d", &m);switch (m) {case0: traverse(head); break;case1: append_node(head); break;case2: {printf("要删除学⽣信息的学号:");scanf_s("%d", &ID);head=delete_ID(head, ID, getlen(head)); }break;case3: {printf("需要修改学⽣信息的同学姓名:");scanf_s("%s", &name, sizeof(name));change(head, name); }break;case4: {printf("search by name:");scanf_s("%s", &name, sizeof(name));search_name(head, name); }break;case5: {printf("学号查询:");scanf_s("%d", &ID);search_ID(head, ID); }break;case6: {printf("请输⼊语⽂成绩的区间:");printf("min=");scanf_s("%d", &min);printf("max=");scanf_s("%d", &max);printf("语⽂成绩在区间%d到%d之间的学⽣:%d⼈\n", min, max, statistics_chinese(head, min, max)); }break;case7: {printf("请输⼊数学成绩的区间:");printf("min=");scanf_s("%d", &min);printf("max=");scanf_s("%d", &max);printf("数学成绩在区间%d到%d之间的学⽣:%d⼈\n", min, max, statistics_math(head, min, max)); }break;case8: {printf("请输⼊英语成绩的区间:");printf("min=");scanf_s("%d", &min);printf("max=");scanf_s("%d", &max);printf("英语成绩在区间%d到%d之间的学⽣:共有%d⼈\n", min, max, statistics_english(head, min, max)); }break;case9: { printf("average of chinese is%d", average_chinese(head, getlen(head))); }break;case10: { printf("average of math is%d", average_math(head, getlen(head))); }break;case11: { printf("average of english is%d", average_english(head, getlen(head))); }break;case12: {printf("请输⼊学⽣的姓名:");scanf_s("%s", &name, sizeof(name));printf("%s 的平均成绩为:%d", name, average_name(head, name)); }break;case13: {printf("按照语⽂成绩从⾼到底排序:");rank_chinese(head, getlen(head)); }break;case14: {printf("按照数学成绩从⾼到底排序:");rank_math(head, getlen(head)); }break;case15: {printf("按照英语成绩从⾼到底排序:");rank_english(head, getlen(head)); }break;case16: openfile(head, getlen(head)); return;}}}int main() {struct person *head;int len;int min, max;int ID = 0;char name[20];printf("请输⼊学⽣信息");printf("学⽣⼈数:");scanf_s("%d", &len); //输⼊要取的地址多少head = create(len); // 创建地址在create⾥⾯就有初始复制函数嵌套traverse(head); //遍历menu(head, getlen(head));release(head); //释放内存system("pause");return0;}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include<stdio.h>#include<string.h>#include<stdlib.h>struct stud{long num;char name[20];float sx;float dx;float ts;float dl;float cx;float zf;float pj;};struct studcode{struct stud student;struct studcode *next;};void menu();void input(struct studcode **);void output(struct studcode *);void binsearch(struct studcode *);void insert(struct studcode **);void delet(struct studcode **);void good(struct studcode *);void fail(struct studcode *);void sort(struct studcode *);void back();void main(){char choose;int flag=1;struct studcode *head;head=NULL;printf(" 请先录入学生成绩信息\n");printf(" 输入学生学号高数、英语读写、英语听说、计算机导论和程序设计的成绩\n");input(&head);while (flag){system("cls");menu(); printf(" 请选择 :"); getchar(); choose=getchar();switch(choose){case '1': output(head); back(); break;case '2': binsearch(head); back(); break;case '3': insert(&head); output(head); back(); break;case '4': delet(&head); output(head); back(); break;case '5': good(head); back(); break;case '6': fail(head); back(); break;case '7': sort(head); output(head); back(); break;case '0': flag=0; printf("\n *** The End! ***\n"); printf("\n #### 感使用,欢迎再次登录,拜拜! break;default: printf("\n Wrong Selection ! (选择错误,请重选 ) \n"); back();}}}void menu(){void back(){int x;printf("\n");do{printf(" 按 1 返回菜单界面 :"); scanf("%d",&x);}while(x!=1);} printf(" \n学生成绩统计与分析系统 \n");printf(" \n 菜 单 \n\n");printf(" \n 1.显示所有学生的信息 \n"); printf(" \n 2.查找某学号的学生信息 \n"); printf(" \n 3.插入某学生的信息 \n"); printf(" \n 4.删除某学号学生的信息 \n"); printf(" \n 5.统计各门课程成绩在 90 分以上学生所占百分比 printf(" \n 6.统计各门课程成绩在 60 分以下学生所占百分比 printf(" \n 7.按总分降序排序,依高低排出名次 \n"); printf(" \n0. 退出 \n\n"); \n"); \n"); ####\n");void input(struct studcode **headp) {struct studcode *p;while(1){p=(struct studcode *)malloc(sizeof(struct studcode));scanf("%ld",&p->student.num);if(p->student.num==0) break;scanf("%s%f%f%f%f%f",&p->,&p->student.sx,&p->student.dx,&p->student.ts,&p->student.dl,&p->student.cx);p->student.zf=p->student.sx+p->student.dx+p->student.ts+p->student.dl+p->student.cx;p->student.pj=p->student.zf/ 5;p->next=*headp;*headp=p;}}void output(struct studcode *head){struct studcode *p;p=head;printf(”学号\t\t高数\t读写\t听说\t导论\t程序\t总分\t平均分\n");while(p!=NULL){ printf("%-ld\t%-4s\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\n",p->student.num,p->,p->student.sx,p->student.dx,p->student.ts,p->student.dl,p->student.cx,p-> s tudent.zf,p->student.pj);p=p->next;}printf("\n");}void binsearch(struct studcode *head){struct studcode *p;int k=1;long x;p=head;printf(" 请输入需要查找的学生的学号:"); scanf("%ld",&x);printf("\n");while(p!=NULL){ if(p->student.num==x){printf(" 该学生信息如下:\n");printf("学号\t\t高数\t读写\t听说\t导论\t程序\t总分\t平均分\n");printf("%-ld\t%-4s\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\n",p->student.num,p->,p->student.sx,p->student.dx,p->student.ts,p->student.dl,p->student.cx,p->stud e nt.zf,p->student.pj);k=0;break;}p=p->next;}if(k) printf(" 没有此学生的信息\n");}void insert(struct studcode **headp){struct studcode *p;p=(struct studcode *)malloc(sizeof (struct studcode));printf(" 请输入你想插入的学生的信息\n");scanf("%ld%s%f%f%f%f%f",&p->student.num,&p->,&p->student.sx,&p->student.dx,&p->student.ts,&p->student.dl,&p->student.cx);p->student.zf=p->student.sx+p->student.dx+p->student.ts+p->student.dl+p->student.cx;p->student.pj=p->student.zf/ 5;p->next=*headp;*headp=p;printf("***** 插入成功*****\n");}void delet(struct studcode **headp){struct studcode *p,*last; long x;p=*headp;printf(" 请输入你要删除的学生的学号:"); scanf("%ld",&x);while(p->student.num!=x&&p->next!=NULL){ last=p;p=p->next;} if(p->student.num==x){ if(p==*headp) *headp=p->next;elselast->next=p->next;free(p);printf("\n***** 删除成功*****\n");}else printf("\n*** 删除失败,无该学生信息***\n");}struct studcode *p;int x1,x2,x3,x4,x5,k;float y1,y2,y3,y4,y5;x1=x2=x3=x4=x5=k=0;p=head;while(p!=NULL){k++;if(p->student.sx>=90) x1++;if(p->student.dx>=90) x2++;if(p->student.ts>=90) x3++;if(p->student.dl>=90) x4++;if(p->student.cx>=90) x5++; p=p->next;}y1=(float)x1/k;y2=(float)x2/k;y3=(float)x3/k;y4=(float)x4/k;y5=(float)x5/k;printf(" 高数\t 读写\t 听说\t 导论\t 程序\n"); printf("%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\n",y1,y2,y3,y4,y5);}void fail(struct studcode *head) {struct studcode *p; int x1,x2,x3,x4,x5,k; float y1,y2,y3,y4,y5; x1=x2=x3=x4=x5=k=0;p=head; while(p!=NULL){ k++; if(p->student.sx<60) x1++; if(p->student.dx<60) x2++;if(p->student.ts<60) x3++; if(p->student.dl<60) x4++; if(p->student.cx<60) x5++;p=p->next;}y1=(float)x1/k;y2=(float)x2/k;y3=(float)x3/k;y4=(float)x4/k;y5=(float)x5/k;printf(" 高数\t 读写\t 听说\t 导论\t 程序\n"); printf("%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\n",y1,y2,y3,y4,y5);}{struct stud temp;int i,j,n;struct studcode *p,*p1,*p2;n=0;p=head;while(p!=NULL){n++; p=p->next;} for(p1=head,i=0;i<n-1;i++,p1=p1->next) for(p2=p1->next,j=i+1;j<n;j++,p2=p2->next) if(p1->student.zf<p2->student.zf){temp=p2->student; p2->student=p1->student; p1->student=temp;}printf("\n***** 排序成功*****\n");。

相关文档
最新文档