C语言程序设计-基于链表的学生成绩管理系统
C语言程序设计-学生成绩管理系统

题目学生成绩管理系统一、功能1.每一条记录包括一个学生的学号、姓名、语数外3门成绩、平均成绩2.输入功能:可以一次完成有限(不大于2000)条记录的输入3.显示功能:完成全部学生记录的显示4.查找功能:完成按学号或姓名查找学生记录,并显示5.排序功能:按学生学号或平均成绩进行排序6.保存功能:将学生记录保存在Information.txt文件中7.读取功能:将保存在文件中的学生记录读取出来8.有一个清晰美观界面来调用各个功能二、要求1.整个系统均用C语言实现2.利用指针、结构体数组或链表来实现学生成绩的数据结构设计3.系统具有输入、显示、查询、修改、删除、排序、保存、读取等基本功能4.系统的各个功能模块都用函数的形式来实现5.可以将学生成绩信息保存在文件中6.可以将学生信息从文件中读取出来三、设计内容整个学生成绩管理系统由主函数及12个子函数构成,实现学生成绩录入、显示、查询、排序、修改、保存、读取和删除共8项功能,各函数功能相信说明如下:1.主函数int main()利用无限次循环while和switch实现对各个函数的调用,使用时根据输入的数字来调用相应的函数2. 显示主菜单函数void DispMainMenu()这是一个无参函数,用来显示程序主菜单,用户通过输入对应功能前的数字来实现相应的功能3. 学生成绩录入函数int InformationInput(STUDENT stu[],int cn)这是一个有返回值的有参函数,形参STUDENT stu[]为结构体数组指针,表示存有学生信息的结构体数组的头指针,形参int cn为当前学生人数,返回值为当前学生人数。
其作用是输入有限个学生的成绩信息。
算法:定义3个变量,num用来存放本次录入学生人数,i、j为循环变量。
由键盘输入学生人数赋值给num,判断num是否大于MAX_NUM(2000),若大于,则提示输入人数太多,函数返回值0;若不大于,则依次输入num个学生信息。
基于c语言学生成绩管理系统编程设计

基于c语言学生成绩管理系统编程设计1. 引言1.1 概述学生成绩管理系统是一种用于方便地记录、管理和分析学生的各项成绩信息的软件系统。
通过该系统,教师和学校管理者可以轻松地追踪学生的学习进展,提供个性化的辅导和支持;同时,学生和家长也能够查看自己或子女的成绩,并及时了解其在不同科目上的表现。
本文基于C语言,旨在设计一个高效且易于使用的学生成绩管理系统。
该系统将采用合理的数据结构和算法,实现快速可靠地对成绩进行录入、查询、修改和统计功能。
通过对系统进行全面测试与性能评估,并且结合实际应用需求进行改进,在文章中总结研究结果并提出未来发展方向建议。
1.2 文章结构本文共分为五个部分:引言、学生成绩管理系统概述、系统设计与实现、功能测试与性能评估以及结论与展望。
- 在引言部分,将介绍本文所要解决问题的背景和意义,并简要说明文章结构;- 学生成绩管理系统概述部分将对该系统具体功能进行详细描述,并介绍设计思路以及目标用户;- 系统设计与实现部分将详细阐述系统的数据结构设计、用户界面设计以及算法实现;- 功能测试与性能评估部分将介绍如何设计测试用例并执行,并给出性能分析和优化策略,最后对结果进行分析讨论;- 结论与展望部分将对本文主要研究结果进行总结,并指明不足之处以及进一步改进方向和未来发展建议。
1.3 目的本文的目的是通过C语言编程,设计一个高效、可靠且易于使用的学生成绩管理系统。
该系统旨在满足现代教育管理的需求,提供方便快捷、个性化的成绩管理服务。
通过详细描述系统的功能和实现过程,并辅以全面的测试和评估,旨在为教师、学校管理者、学生和家长提供一个有效的工具,以更好地跟踪学生成绩、提供个性化教学和支持,并为未来发展提出建议。
2. 学生成绩管理系统概述2.1 系统功能介绍学生成绩管理系统是一种基于C语言编程的应用软件,旨在帮助学校或教育机构有效管理和统计学生的各项考试成绩。
该系统具备以下主要功能:- 学生信息管理:记录学生的基本信息,包括姓名、学号和班级等,并可以进行增加、删除、修改和查询等操作。
学生成绩管理系统c语言课程设计报告

学生成绩管理系统c语言课程设计报告一、引言学生成绩管理系统是一个为学校或教育机构提供学生学业成绩管理的重要工具。
通过该系统,可以方便地记录和查询学生的各项成绩,帮助教师和学生了解学生的学业表现,及时作出教学和学习的调整和改进。
本文将介绍一个基于C语言的学生成绩管理系统的设计与实现。
二、需求分析1. 学生信息管理:包括学生基本信息的录入、修改和删除。
2. 成绩信息管理:包括成绩的录入、修改和删除。
3. 成绩查询与统计:可以按照学生学号或姓名查询学生的成绩,并能够进行成绩的统计分析,如计算平均分和排名等。
4. 数据存储与备份:能够将学生信息和成绩信息存储在文件中,并能够进行数据的备份和恢复。
三、系统设计1. 学生信息管理模块:设计一个结构体来存储学生的基本信息,包括学号、姓名、性别、年龄等。
通过菜单选择,可以实现学生信息的录入、修改和删除功能。
2. 成绩信息管理模块:设计一个结构体来存储学生的成绩信息,包括科目名称和成绩。
通过菜单选择,可以实现成绩信息的录入、修改和删除功能。
3. 成绩查询与统计模块:通过学号或姓名查询学生的成绩,并能够进行成绩的统计分析,如计算平均分和排名等。
4. 数据存储与备份模块:设计文件操作函数,将学生信息和成绩信息存储在文件中,并能够进行数据的备份和恢复。
四、系统实现1. 使用C语言编写程序代码,通过结构体和数组等数据结构实现学生信息和成绩信息的存储。
2. 利用文件操作函数实现数据的读取和存储,包括学生信息和成绩信息的存储和备份。
3. 设计菜单界面,通过用户选择来实现各个功能模块的调用。
五、系统测试与优化1. 针对各个功能模块进行测试,验证系统的正确性和稳定性。
2. 根据测试结果优化程序代码,提高系统性能和用户体验。
3. 完善系统功能,考虑异常情况的处理,提高系统的容错性和健壮性。
六、总结与展望通过本次课程设计,我们成功实现了一个基于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.录入学生成绩信息\n\t2.输出学生成绩信息\n\t3.按学号查找学生信息\n\t4.按姓名查找学生信息\n\t5.修改学生信息\n\t6.删除学生信息\n\t7.保存学生信息到文件\n\t8.从文件中读取学生信息\n\t9.年级总成绩排序\n\t10.班级总成绩排序\n\t11.退出\n");printf("\n\n");printf("请输入您要查询的项目:\n");scanf("%d",&ch);switch(ch){case 1:system("cls");createstulist(L);break;case 2:system("cls");printstulist(L);break;case 3: system("cls");searchstu_numlist(L);break;case 4: system("cls");searchstu_namelist(L);break;case 5: system("cls");modifystulist(L);break;case 6: system("cls");delatestulist( L);break;case 7: system("cls");savestulist(L);break;case 8: system("cls");L=loadstulist();break;case 9: system("cls");sortstulist(L);break;case 10: system("cls");sortstuclass(L);break;case 11:system("cls");exit(0);}}while(1);}//************************************//linklist createstulist(linklist L) //录入信息函数// {linklist p,q;char ch;q=L;printf("*******请输入学生信息*******\n\n\n");do{p=(linklist)malloc(sizeof(Node));if(!p){printf("没有多余内存空间\n");return L;}printf("请输入学号:\n");scanf("%d",&p->data.num);printf("请输入姓名:\n");scanf("%s",&p->);printf("请输入年级:\n");scanf("%s",&p->data.grade);printf("请输入班级:\n");scanf("%s",&p->data.classroom);printf("请输入数学成绩:\n");scanf("%f",&p->data.score_math);while(p->data.score_math>100){printf("成绩超过100了,你是猪吗?\n");printf("给老子重新输入:\n");scanf("%f",&p->data.score_math);}printf("请输入语文成绩:\n");scanf("%f",&p->data.score_chinese);while(p->data.score_chinese>100){printf("成绩超过100了,你是猪吗?\n");printf("给老子重新输入:\n");scanf("%f",&p->data.score_chinese);}printf("请输入英语成绩:\n");scanf("%f",&p->data.score_english);while(p->data.score_english>100){printf("成绩超过100了,你是猪吗?\n");printf("给老子重新输入:\n");scanf("%f",&p->data.score_english);}p->data.sum=p->data.score_math+p->data.score_chinese+p->data.score_english; p->data.average=p->data.sum/3;q->next=p;q=p;q->next=NULL;printf("是否要输入下一个学生的信息(Y/N)!");fflush(stdin);ch=getchar();system("cls");}while(ch=='Y'||ch=='y');return(L);}//*****************************************//void printstulist(linklist L) //输出信息函数//{linklist p;p=L->next;if(p==NULL){printf("请先录入学生信息,亲!\n");}elsewhile(p!=NULL){printf("学号姓名年级班级数学成绩语文成绩英语成绩总分平均成绩\n");printf("%6d %3s %2s %2s %4.1f %4.1f %4.1f %4.1f %4.1f\n", p->data.num,p->,p->data.grade,p->data.classroom,p->data.score_math,p->data.score_ chinese,p->data.score_english,p->data.sum,p->data.average);p=p->next;}printf("按任意键继续\n");getch();system("cls");}//*******************************************************//void searchstu_namelist(linklist L) //按姓名查询函数//{linklist p;char str[10];printf("请输入要查询的学生姓名:\n");scanf("%s",str);p=L->next;if(p==NULL){printf("请先录入学生信息\n");}while(p!=NULL){if(strcmp(p->,str)==0){printf("学号姓名年级班级数学成绩语文成绩英语成绩总分平均成绩\n");printf("%6d %3s %2s %2s %4.1f %4.1f %4.1f %4.1f %4.1f\n", p->data.num,p->,p->data.grade,p->data.classroom,p->data.score_math,p->data.score_ chinese,p->data.score_english,p->data.sum,p->data.average);}p=p->next;}printf("按任意键继续\n");getch();system("cls");}//****************************************//void searchstu_numlist(linklist L) //按学号查询函数//{linklist p;int number;printf("请输入要查询的学生学号:\n");scanf("%d",&number);p=L->next;if(p==NULL){printf("请先录入学生信息\n");}while(p!=NULL){if(p->data.num==number){printf("学号姓名年级班级数学成绩语文成绩英语成绩总分平均成绩\n");printf("%6d %3s %2s %2s %4.1f %4.1f %4.1f %4.1f %4.1f\n", p->data.num,p->,p->data.grade,p->data.classroom,p->data.score_math,p->data.score_ chinese,p->data.score_english,p->data.sum,p->data.average);}p=p->next;}printf("按任意键继续\n");getch();system("cls");}//*****************************************************//linklist delatestulist(linklist L) //删除信息函数//{linklist p,q;int number;char ch;printf("请输入要删除的学生学号:\n");scanf("%d",&number);p=L->next;if(p==NULL){printf("请先录入学生信息\n");return NULL;}while(p!=NULL){if(p->data.num==number){printf("学号姓名年级班级数学成绩语文成绩英语成绩总分平均成绩\n");printf("%6d %3s %2s %2s %4.1f %4.1f %4.1f %4.1f %4.1f\n", p->data.num,p->,p->data.grade,p->data.classroom,p->data.score_math,p->data.score_ chinese,p->data.score_english,p->data.sum,p->data.average);printf("确定要删除该学生的信息吗?(Y/N)\n");fflush(stdin);ch=getchar();if(ch=='Y'||ch=='y'){q=L;while(q->next!=p)q=q->next;if(q->next=p){if(p->next==NULL)q->next=NULL;elseq->next=p->next;free(p);printf("已删除该学生的相关信息!\n");return(L);}}elsereturn NULL;}elsep=p->next;}printf("按任意键继续\n");getch();system("cls");}//***************************************//void savestulist(linklist L) //存盘函数//{FILE *fp;linklist p;char outfile[20];printf("请输入你要保存信息的文件名:(例如:D:\\学生管理系统\\student.text)\n");scanf("%s",outfile);if((fp=fopen(outfile,"w"))==NULL){printf("文件打开失败\n");exit(1);}p=L;while(p!=NULL){fwrite(p,sizeof(Node),1,fp);p=p->next;}fclose(fp);printf("信息保存成功!\n");printf("请按任意键继续\n");getch();system("cls");}//*******************************************//linklist loadstulist() //读盘函数// {linklist q,p,L;L=NULL;FILE *fp;char infile[20];printf("请输入要打开的文件名:\n");scanf("%s",infile);if((fp=fopen(infile,"rb"))==NULL){printf("文件打开失败!\n");exit(1);}printf("正在打开文件....\n");p=(linklist)malloc(sizeof(Node));if(!p){printf("无法申请到内存空间");return L;}L=p;while(!feof(fp)){if(fread(p,sizeof(Node),1,fp)!=1){printf("读取信息失败!\n");break;}p->next=(linklist)malloc(sizeof(Node));if(!p->next){printf("无法申请到内存空间");return L;}q=p;p=p->next;}q->next=NULL;fclose(fp);printf("读取成功!\n");return L;}//*************************************************//void sortstulist(linklist L) //年级排序函数// {STU stu[1000];int i=0;int flag=0;linklist p;p=L->next;if(p==NULL){printf("请先录入学生信息,亲!\n");}while(p!=NULL&&i<1000){stu[i]=p->data;i++;p=p->next;flag++;}printf("正在排序.....\n");sort(stu, flag);}//******************************************************// void sort(STU stu[],int flag){int i,j;STU temp;for(i=1;i<flag;i++)for(j=0;j<flag-i;j++){if(stu[j].sum>stu[j+1].sum){temp=stu[j];stu[j]=stu[j+1];stu[j+1]=temp;}}printf("学号姓名年级班级数学成绩语文成绩英语成绩总分平均成绩\n");for(i=flag-1;i>=0;i--)printf("%6d %3s %2s %2s %4.1f %4.1f %4.1f %4.1f %4.1f\n", stu[i].num,stu[i].name,stu[i].grade,stu[i].classroom,stu[i].score_math,stu[i].score_chinese,stu[i].s core_english,stu[i].sum,stu[i].average);printf("按任意键继续!\n");getch();system("cls");}//*****************************************************//void sortstuclass(linklist L) //班级排序函数//{STU stu[1000];int i=0;STU c1[100],c2[100],c3[100],c4[100],c5[100],c6[100],c7[100],c8[100];int flag=0,flag1=0,flag2=0,flag3=0,flag4=0,flag5=0,flag6=0,flag7=0,flag8=0;int j1=0,j2=0,j3=0,j4=0,j5=0,j6=0,j7=0,j8=0;int ch;linklist p;p=L->next;if(p==NULL){printf("请先录入学生信息,亲!\n");}while(p!=NULL&&i<1000){stu[i]=p->data;i++;p=p->next;flag++;}printf("\t1.一班成绩\n\t2.二班成绩\n\t3.三班成绩\n\t4.四班成绩\n\t5.五班成绩\n\t6.六班成绩\n\t7.七班成绩\n\t8.八班成绩\n");printf("请选择你要查询的班级:\n");scanf("%d",&ch);for(i=0;i<flag;i++){if(strcmp(stu[i].classroom,"一班")==0) {c1[j1]=stu[i];j1++;flag1++;}else if(strcmp(stu[i].classroom,"二班")==0) {c2[j2]=stu[i];j2++;flag2++;}else if(strcmp(stu[i].classroom,"三班")==0) {c3[j3]=stu[i];j3++;flag3++;}else if(strcmp(stu[i].classroom,"四班")==0) {c4[j4]=stu[i];j4++;flag4++;}else if(strcmp(stu[i].classroom,"五班")==0) {c5[j5]=stu[i];j5++;flag5++;}else if(strcmp(stu[i].classroom,"六班")==0) {c6[j6]=stu[i];j6++;flag6++;}else if(strcmp(stu[i].classroom,"七班")==0) {c7[j7]=stu[i];j7++;flag7++;}else{c8[j8]=stu[i];j8++;flag8++;}}switch(ch){case 1: sort(c1,flag1);break;case 2: sort(c2,flag2);break;case 3: sort(c3,flag3);break;case 4: sort(c4,flag4);break;case 5: sort(c5,flag5);break;case 6: sort(c6,flag6);break;case 7: sort(c7,flag7);break;case 8: sort(c8,flag8);break;}}//**************************************************************************// linklist modifystulist(linklist L) //修改信息函数//{linklist p;int n,m;float math,chinese,english;char name[10],grade[10],classroom[10];char ch;p=L->next;printf("请输入要修改的学生学号:\n");scanf("%d",&n);while(p!=NULL){if(p->data.num!=n)p=p->next;else{printf("学号姓名年级班级数学成绩语文成绩英语成绩总分平均成绩\n");printf("%6d %3s %2s %2s %4.1f %4.1f %4.1f %4.1f %4.1f\n", p->data.num,p->,p->data.grade,p->data.classroom,p->data.score_math,p->data.score_ chinese,p->data.score_english,p->data.sum,p->data.average);printf("是否要修改该学生的信息?(Y/N)\n");fflush(stdin);ch=getchar();if(ch=='Y'||ch=='y'){printf("请输入该生新的学号:\n");scanf("%d",&m);printf("请输入该生新的姓名:\n");scanf("%s",name);printf("请输入该生新的年级:\n");scanf("%s",grade);printf("请输入该生新的班级:\n");scanf("%s",classroom);printf("请输入该生新的数学成绩:\n");scanf("%f",&math);printf("请输入该生新的语文成绩:\n");scanf("%f",&chinese);printf("请输入该生新的英语成绩:\n");scanf("%f",&english);p->data.num=m;strcpy(p->,name);strcpy(p->data.grade,grade);strcpy(p->data.classroom,classroom);p->data.score_math=math;p->data.score_chinese=chinese;p->data.score_english=english;p->data.sum=p->data.score_math+p->data.score_chinese+p->data.score_english;p->data.average=p->data.sum/3;printf("修改完成!\n");printf("按任意键继续");getch();//return(L);system("cls");return L;}}if(p=NULL)printf("没有找到要修改的学生信息,亲!\n");}printf("按任意键继续");getch();}********************//。
学生成绩管理系统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语言程序设计-学生成绩管理系统C语言课程设计报告课题题目:学生信息管理系统班级:信卓11801姓名:**题目一. 题目: (3)二.设计目的 (3)三.总体设计 (3)四.详细设计 (7)1.动态创建链表 (9)2.排序 (10)3.查询信息 (11)4.修改学生信息 (13)6.输出所有学生的所有数据 (15)7.统计各分数段的人数 (16)五.调试与测试 (17)六.课程设计心得与体会 (24)一.题目:学生信息管理系统要求:从文件中读取原始数据,并将修改后的数据保存在一个新的文件当中。
功能:1.浏览所有学生的所有信息2.用姓名和学号查询学生的信息3.用姓名和学号修改学生的信息4.用姓名和学号删除学生5.统计各个课程分数段的人数6.统计总分和各个课程的最高分、最低分以及对应的姓名二.设计目的如今学校的学生越来越多,成绩管理的工作量越来越大,手工管理成绩的弊端也越来越明显。
随着科学技术的不断提高,计算机科学日渐成熟,它已进入人类社会的各个领域并发挥着越来越重要的作用。
作为计算机应用的一部分,使用计算机对学生档案信息进行管理,具有手工管理所无法比拟的优点。
所以我想借本次课程设计之际,设计一个简易的学生成绩管理系统。
掌握: 1.掌握动态创建链表,并实现对数据的删除,检索,修改。
1.增强工程化意识,提高c语言实践能力。
三.总体设计(1)程序源文件分为:1.student.h 包含所有的头文件以及定义2.function.cpp 实现各个函数的功能3.main.cpp 主函数4.data.txt 学生原始数据(2)主函数实现菜单的选择:使用swicth语句实现菜单的选择1.浏览学生信息2.查询学生信息3.修改学生信息4.删除学生信息5.各科成绩6.最高分最低分以及对应的姓名(3)函数包括:1.struct student * create() //用动态链表建立基础的学生信息库从文件中将学生信息读取出来2.void sort(struct student *head) //排序3.void locatename(struct student *head) //通过姓名查询信息4.void locatenum(struct student *head) //通过学号查询信息5.struct student * delname(struct student *head) //通过姓名删除学生信息6.struct student * delnum(struct student *head) //通过学号删除学生信息7.void changename(struct student *head) //通过姓名去修改学生数据8.void changenum(struct student *head) //通过学号去修改学生数据9.void filein(struct student *head) //保存到文件中10.void print(struct student *head) //打印所有学生信息11.void ABCD(struct student *head) //统计各分段的人数12.void max(struct student * head) //总分以及各个课程的最高分,最低分以及对应的姓名对于创建链表和删除学生这两个函数需要返回head创建链表时返回head:其他函数中都传入了一个参数head那么都可以访问到链表中的所有数据删除学生返回head:当删除第一个学生时,即把头给删了这时需要换头head = delname(head); head= delnum(head);其它函数使用void类型即可四.详细设计使用结构体链表实现上述要求,在头文件中定义结构体,分为数据域和指针域。
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语言程序设计-学生成绩管理系统源码

#include〈stdio.h>#include<conio。
h>#include<malloc.h>#include<string.h>struct STUDENT{char studentNumber[10];/*学生学号*/char studentName[20];/*学生姓名*/char className[20];/*班级名称*/float mark1;/*第1门成绩*/float mark2;/*第2门成绩*/float mark3;/*第3门成绩*/struct STUDENT *next;};struct STUDENT *headLink;/*链表表头指针*//*以下是函数声明*/void ReadInfoFormFile(void);/*读入信息形成文件*/void DisplayMenu(void);void CreateHeadLink(void);struct STUDENT *MallocNode(void);void GetInformation(struct STUDENT *t);void OutputInformation(void);void DisplayInfoBystudentName(void);void DisplayInfoBystudentNumber(void);void DisplayOneNode(struct STUDENT *t);void InsertOneNode(struct STUDENT *t);void DeleteNodeBystudentNumber(void);void ChangeMarkByName(void);void ChangeMarkByNumber(void);void SaveLinkToFile(void);void DisplayMarkSegment(void);/*显示各分数段的学生成绩*/ void CompositorByTotalMark(void);/*按总成绩排序*/int choose;/*用于接受用户的选择*//*主函数*/int main(){CreateHeadLink();ReadInfoFormFile();DisplayMenu();return 0;}/************************************函数功能:从文件中读学生信息到链表中************************************/void ReadInfoFormFile(void){FILE *fp;STUDENT *p;fp=fopen(”student。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华北科技学院计算机系综合性实验 实 验 报 告
课程名称 C语言程序设计 实验学期 2011 至 2012 学年 第 二 学期 学生所在系部 计算机系 年级 2011 专业班级 计算机科学与技术B-111 学生姓名 学号 任课教师 实验成绩
计算机系制 华北科技学院计算机系综合性实验报告
第 1 页 实验报告须知 1、 学生上交实验报告时,必须为打印稿(A4纸)。页面空间不够,可以顺延。 2、 学生应该填写的内容包括:封面相关栏目、实验地点、时间、目的、设备环境、内容、结果及分析等。 3、 教师应该填写的内容包括:实验成绩、教师评价等。 4、 教师根据本课程的《综合性实验指导单》中实验内容的要求,评定学生的综合性实验成绩;要求在该课程期末考试前将实验报告交给任课教师。综合性实验中,所涉及的程序,文档等在交实验报告前,拷贝给任课教师。任课教师统一刻录成光盘,与该课程的期末考试成绩一同上交到系里存档。 5、 未尽事宜,请参考该课程的实验大纲和教学大纲。 华北科技学院计算机系综合性实验报告
第 2 页 《C语言程序设计》课程综合性实验报告
开课实验室:基础五 2012年7月 6 日 实验题目 基于链表的学生成绩管理系统
一、实验目的 1、掌握链表的创建、遍历显示和清除; 2、掌握链表数据的文件保存、读取;
二、设备与环境 微型计算机、VC++6.0 三、实验内容 1、定义结构体,创建链表 struct xsnode { int xh; char xm[15]; int gs; int yy; int wl; struct xsnode *next; };
2、根据以上链表结点结构,实现以下功能 a、学生学号、姓名、各门成绩的录入; b、链表数据显示及清除; c、链表数据的文件保存与读取;
四、实验结果及分析 1、运行结果 主菜单 华北科技学院计算机系综合性实验报告
第 3 页 数据显示
2、源程序 主函数 void main() { int xz=0; struct xs *head; head=init(); while(xz!=5) { menu(); scanf("%d",&xz); switch(xz) { case 1: create(head); break; case 2: print(head); break; case 3: save(head); break; case 4: read(head); break; case 5: printf("\n 系统退出,拜拜!\n "); break; default: printf("\n 选择错误,请按任意键选择!\n "); getch(); break; 华北科技学院计算机系综合性实验报告 第 4 页 } } fr(head); free(head); }
数据录入源代码 void create(struct xs *hd) { int xh,gs,yy,wl,i; char xm[20]; struct xs *p; fr(hd); printf("\n 请输入学生个数:"); scanf("%d",&num); for(i=0;i{ printf("请输入%d个学生 of %d\n",i+1,num); printf(" 学号:"); scanf("%d",&xh); printf(" 姓名:"); scanf("%s",xm); printf(" 高数:"); scanf("%d",&gs); printf(" 英语:"); scanf("%d",&yy); printf(" 物理:"); scanf("%d",&wl);
p=(struct xs *)malloc(sizeof(struct xs)); p->xh=xh; strcpy(p->xm,xm); p->gs=gs; p->yy=yy; p->wl=wl;
p->next=hd->next; hd->next=p; } printf(" 录入数据完毕,请按任意键继续!\n "); getch(); }
添加记录源代码 void print(struct xs *hd) 华北科技学院计算机系综合性实验报告 第 5 页 { struct xs*p; p=hd->next; if(p!=NULL) { printf("\n 数据显示\n"); printf("**********************************************\n"); printf(" 学号 姓名 高数 英语 物理 平均分\n"); printf("**********************************************\n"); while(p!=NULL) { printf("%4d ",p->xh); printf("%10s",p->xm); printf("%8d",p->gs); printf("%7d",p->yy); printf("%6d",p->wl); printf("%8.2f\n",(p->wl+p->wl+p->wl)/3.0); p=p->next; } printf("**********************************************\n"); printf(" 链表显示完毕,请按任意键继续!\n"); getch(); } else printf("\n 当前链表为空,请先读取文件或创建链表!\n 按任意键继续!\n "); }
查询记录源代码 void menu() { system("cls"); printf(" ****************************************\n"); printf(" * 学生成绩管理系统(1.0) *\n"); printf(" ****************************************\n"); printf(" * jb11-1 31 宋洁 2012-7-3 *\n"); printf(" ****************************************\n"); printf(" * 1-创建链表 *\n"); printf(" * 2-数据显示 *\n"); printf(" * 3-保存文件 *\n"); printf(" * 4-读取文件 *\n"); printf(" * 5-系统退出 *\n"); printf(" ****************************************\n"); printf(" 请选择操作(1-5:"); 华北科技学院计算机系综合性实验报告 第 6 页 }
源程序 #include"stdio.h" #include"stdlib.h" #include #include"conio.h" struct xs { int xh; char xm[20]; int gs,yy,wl; struct xs *next; }; int num=0; struct xs *init() { struct xs* hd; hd=(struct xs *)malloc(sizeof(struct xs)); hd->next=NULL; return hd; } void fr(struct xs *hd) { struct xs *p; p=hd->next; while(hd->next!=NULL) { p=hd->next; hd->next=p->next; free(p); } } void create(struct xs *hd) { int xh,gs,yy,wl,i; char xm[20]; struct xs *p; fr(hd); printf("\n 请输入学生个数:"); scanf("%d",&num); for(i=0;i{ printf("请输入%d个学生 of %d\n",i+1,num); printf(" 学号:"); 华北科技学院计算机系综合性实验报告 第 7 页 scanf("%d",&xh); printf(" 姓名:"); scanf("%s",xm); printf(" 高数:"); scanf("%d",&gs); printf(" 英语:"); scanf("%d",&yy); printf(" 物理:"); scanf("%d",&wl);
p=(struct xs *)malloc(sizeof(struct xs)); p->xh=xh; strcpy(p->xm,xm); p->gs=gs; p->yy=yy; p->wl=wl;
p->next=hd->next; hd->next=p; } printf(" 录入数据完毕,请按任意键继续!\n "); getch(); } void save(struct xs *hd) { if(hd->next!=NULL) { struct xs *p=hd->next; int i; FILE *fp; fp=fopen("yh.txt","w"); fprintf(fp,"%3d\n",num); for(i=0;i{
fprintf(fp,"%3d %12s %3d %3d %3d\n",p->xh,p->xm,p->gs,p->yy,p->wl); p=p->next; } fclose(fp); printf("\n 保存文件完毕,请按任意键继续!\n "); getch(); } else { printf("\n 当前链表为空,不需要保存,请按任意键继续!\n ");