C语言程序设计-基于链表的学生成绩管理系统
- 格式:doc
- 大小:98.00 KB
- 文档页数:18
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语言课程设计报告课题题目:学生信息管理系统班级:信卓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类型即可四.详细设计使用结构体链表实现上述要求,在头文件中定义结构体,分为数据域和指针域。
#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语言实现的学生成绩管理系统。
二、系统概述学生成绩管理系统主要由三个模块组成,即:数据录入模块、数据处理模块和数据输出模块。
数据录入模块:将每个学生的个人资料、成绩数据及相关信息,用户图形用户界面录入进系统;数据处理模块:利用程序能实现学生的成绩,统一的处理成绩,例如排名、查找,等;数据输出模块:该模块是整个系统的核心模块,将输出内容包括:学生基本信息、每门课程的各项成绩、平均成绩、综合排名等相关信息,通过程序。
三、系统功能介绍1.数据录入:学生的基本信息及考试成绩等信息的输入,用于后续数据处理及学生成绩的查询。
2.成绩查询:具备基本的查询功能,可以根据学生的学号及姓名查询学生的成绩,以及详细的学生考试成绩。
3.信息统计:可以进行全体学生的各项考试成绩信息综合统计,统计分析每个班级、每个专业、每门课程的考试情况,以及学生的排名,让用户知道整体的学习情况及有效管理学生的学习。
4.安全设置:系统具备安全设置功能,确保用户的信息安全,保证用户的登录权限,为系统及用户提供足够的安全保障,确保系统的数据安全。
四、系统分析系统分析阶段主要包含了分析及设计的步骤,为了更好的实现学生成绩管理的功能,系统分析中分析出学生信息、班级信息、考试信息等相关信息,以便为系统设计提供理论依据。
系统设计是系统分析的一个重要环节,通过设计,能够实现系统的功能,系统设计中定义出系统的基本流程及外部接口,使得系统能够正常运行。
五、系统实现六、系统测试学生成绩管理系统在功能测试过程中,通过实际的操作来测试学生成绩管理系统,测试的主要内容是系统的基本功能及系统的数据安全性,通过实际的操作,测试员可以详细的检查系统是否符合预期的功能,以及系统的正确度,从而保证系统的可靠性及安全性。
学生成绩管理系统c语言课程设计1. 介绍学生成绩管理系统是一种可以帮助学校或教育机构管理学生的成绩信息的软件系统。
它能够记录和管理学生的各门课程的成绩,提供成绩查询、统计分析以及生成报表的功能。
在这个项目中,我们将使用C语言来设计和实现一个简单的学生成绩管理系统。
2. 功能需求2.1 学生信息管理•添加学生信息:输入学生的学号、姓名、性别、年龄等基本信息,并将其保存到系统中。
•修改学生信息:根据学生的学号或姓名,找到对应的学生信息,并允许修改其基本信息。
•删除学生信息:根据学生的学号或姓名,找到对应的学生信息,并从系统中删除。
2.2 成绩管理•录入学生成绩:输入学生的学号或姓名,根据学号或姓名找到对应的学生信息,并记录其各门课程的成绩。
•查询学生成绩:根据学生的学号或姓名,找到对应的学生信息,并显示其各门课程的成绩。
•统计学生成绩:计算学生的总分、平均分等统计信息,并按照成绩排名进行排序并显示。
•生成成绩报表:将学生的成绩信息按照一定的格式输出到文件中,以方便查阅和打印。
2.3 界面设计•主菜单:显示系统的功能选项,包括学生信息管理、成绩管理、退出等选项。
•学生信息管理菜单:显示学生信息管理的功能选项,包括添加学生信息、修改学生信息、删除学生信息等选项。
•成绩管理菜单:显示成绩管理的功能选项,包括录入学生成绩、查询学生成绩、统计学生成绩、生成成绩报表等选项。
•输入提示:在功能选项中,根据需要给出相应的输入提示,以引导用户正确地操作系统。
3. 设计思路3.1 数据结构设计为了实现学生成绩管理系统,我们需要设计合适的数据结构来存储学生信息和成绩。
在这个项目中,我们可以使用结构体来表示学生信息,如下所示:struct Student {int id; // 学号char name[20]; // 姓名char gender[10]; // 性别int age; // 年龄float grades[5]; // 各门课程成绩};3.2 模块设计为了实现功能需求中的各项功能,我们需要设计相应的模块来实现。
#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"); }。
#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语言的学生成绩管理系统。
该系统可以帮助教师轻松地录入、查询和统计学生成绩,提供全面的学生成绩管理功能。
功能概述学生成绩管理系统主要包括以下功能:1.学生信息管理:可以添加、查询、修改、删除学生信息。
每个学生包括学号、姓名、性别、年龄等基本信息。
2.课程信息管理:可以添加、查询、修改、删除课程信息。
每门课程包括课程编号、课程名称、学分等基本信息。
3.成绩录入:可以根据学号和课程编号录入学生的课程成绩。
成绩包括平时成绩、期中成绩、期末成绩等。
4.成绩查询:可以根据学号或姓名查询学生的成绩,包括总成绩和各项成绩。
5.成绩统计:可以统计每门课程的平均成绩、最高成绩、最低成绩等统计数据。
6.成绩排序:可以按照总成绩对学生进行排序,以便了解学生的学习情况。
7.成绩报表:可以生成学生的成绩报表,以便于打印或导出。
系统设计学生成绩管理系统主要由以下几个模块组成:1.学生信息管理模块:通过该模块可以实现学生信息的添加、查询、修改和删除操作。
学生信息可以存储在文件中,使用文件读写函数实现对学生信息的操作。
2.课程信息管理模块:通过该模块可以实现课程信息的添加、查询、修改和删除操作。
课程信息可以存储在文件中,使用文件读写函数实现对课程信息的操作。
3.成绩录入模块:通过该模块可以根据学号和课程编号录入学生的课程成绩。
成绩信息可以存储在文件中,使用文件读写函数实现对成绩信息的操作。
4.成绩查询模块:通过该模块可以根据学号或姓名查询学生的成绩。
查询结果可以显示在屏幕上。
5.成绩统计模块:通过该模块可以统计每门课程的平均成绩、最高成绩、最低成绩等统计数据。
统计结果可以显示在屏幕上。
6.成绩排序模块:通过该模块可以按照总成绩对学生进行排序。
排序结果可以显示在屏幕上。
7.成绩报表模块:通过该模块可以生成学生的成绩报表,以便于打印或导出。
华北科技学院计算机系综合性实验实验报告课程名称 C语言程序设计实验学期 2011 至 2012 学年第二学期学生所在系部计算机系年级 2011 专业班级计算机科学与技术B-111学生姓名学号任课教师实验成绩计算机系制实验报告须知1、学生上交实验报告时,必须为打印稿(A4纸)。
页面空间不够,可以顺延。
2、学生应该填写的内容包括:封面相关栏目、实验地点、时间、目的、设备环境、内容、结果及分析等。
3、教师应该填写的内容包括:实验成绩、教师评价等。
4、教师根据本课程的《综合性实验指导单》中实验内容的要求,评定学生的综合性实验成绩;要求在该课程期末考试前将实验报告交给任课教师。
综合性实验中,所涉及的程序,文档等在交实验报告前,拷贝给任课教师。
任课教师统一刻录成光盘,与该课程的期末考试成绩一同上交到系里存档。
5、未尽事宜,请参考该课程的实验大纲和教学大纲。
《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、运行结果主菜单数据显示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;代码:#include"stdio.h"#include"stdlib.h"#include<string.h>#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<num;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 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<num;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 ");getch();}}void read(struct xs *hd){int i;struct xs *p;FILE *fp;fr(hd);fp=fopen("yh.txt","r");fscanf(fp,"%3d\n",&num);for(i=0;i<num;i++){p=(struct xs *)malloc(sizeof(struct xs));fscanf(fp,"%3d %12s %3d %3d %3d\n",p->xh,p->xm,p->gs,p->yy,p->wl);p->next=hd->next;hd->next=p;}fclose(fp);printf("\n 读取文件完毕,请按任意键继续!\n ");getch();}void print(struct xs *hd){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();}elseprintf("\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:");}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;}}fr(head);free(head);}。
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(链表)语⾔#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;}。
学生成绩管理系统c语言课程设计学生成绩管理系统是指通过计算机技术来管理学生的各类成绩信息的系统,主要包括学生信息的录入、查询、修改和删除,成绩信息的录入、查询、修改和统计等功能。
下面是一个关于学生成绩管理系统的C语言课程设计的参考内容。
一、需求分析1. 系统具备学生信息的录入功能,包括学号、姓名、性别、年龄、班级等信息。
2. 系统具备学生成绩的录入功能,包括课程名称、学分、成绩等信息。
3. 系统具备学生信息的查询功能,可以通过学号、姓名等关键字进行查询,并显示结果。
4. 系统具备学生成绩的查询功能,可以按照学号、课程名称等关键字进行查询,并显示结果。
5. 系统具备学生成绩的统计功能,可以统计某一门课程的平均分、最高分、最低分等。
6. 系统具备学生信息的修改功能,可以修改学生的基本信息。
7. 系统具备学生成绩的修改功能,可以修改学生的某一门课程成绩。
8. 系统具备学生信息的删除功能,可以根据学号删除学生的信息。
9. 系统具备学生成绩的删除功能,可以根据学号删除学生的某一门课程成绩。
二、设计思路1. 定义学生信息和成绩信息的结构体,在结构体中定义相应的成员变量。
2. 定义学生信息和成绩信息的数组,用于存储录入的数据。
3. 通过循环菜单的方式,提供用户选择所需功能。
4. 根据用户的选择,调用相应的函数实现相应的功能。
三、实现步骤1. 定义学生信息和成绩信息的结构体,包括学号、姓名、性别、年龄、班级等信息。
2. 定义学生信息和成绩信息的全局变量,用于存储录入的数据。
3. 实现学生信息的录入功能,通过scanf函数接收用户输入,并将数据存储到学生信息数组中。
4. 实现学生成绩的录入功能,通过scanf函数接收用户输入,并将数据存储到成绩信息数组中。
5. 实现学生信息的查询功能,通过for循环遍历学生信息数组,根据关键字查询并输出结果。
6. 实现学生成绩的查询功能,通过for循环遍历成绩信息数组,根据关键字查询并输出结果。
华北科技学院计算机系综合性实验实验报告课程名称 C 语言程序设计实验学期2011 至2012 学年第二学期学生所在系部计算机系年级2011 专业班级计算机科学与技术B-111学生姓名学号任课教师实验成绩计算机系制实验报告须知1、学生上交实验报告时,必定为打印稿(A4纸)。
页面空间不够,可以顺延。
2、学生应该填写的内容包括:封面相关栏目、实验地点、时间、目的、设备环境、内容、结果及解析等。
3、教师应该填写的内容包括:实验成绩、教师议论等。
4、教师依照本课程的《综合性实验指导单》中实验内容的要求,评定学生的综合性实验成绩;要求在该课程期末考试前将实验报告交给任课教师。
综合性实验中,所涉及的程序,文档等在交实验报告前,拷贝给任课教师。
任课教师一致刻录成光盘,与该课程的期末考试成绩一同上交到系里存档。
5、未尽事宜,请参照该课程的实验大纲和授课大纲。
《C语言程序设计》课程综合性实验报告开课实验室:基础五2012 年7月6 日实验题目基于链表的学生成绩管理系统一、实验目的1、掌握链表的创办、遍历显示和除去;2、掌握链表数据的文件保存、读取;二、设备与环境微型计算机、VC++三、实验内容1、定义结构体,创办链表structxsnode{intxh;charxm[15];intgs;intyy;intwl;structxsnode*next;};2、依照以上链表结点结构,实现以下功能、学生学号、姓名、各门成绩的录入;、链表数据显示及除去;、链表数据的文件保存与读取;四、实验结果及解析1、运行结果主菜单C语言程序设计基于链表格范例的学生成绩管理学习系统数据显示2、源程序主函数voidmain(){intxz=0;structxs*head;head=init();while(xz!=5){menu();scanf("%d",&xz);switch(xz){case1:create(head);break;case2:print(head);break;case3:save(head);break;case4:read(head);break;case5:printf("\n系统退出,拜拜!\n"); break;default:printf("\n选择错误,请按任意键选择!\n");getch(); break;}}fr(head);free(head);}数据录入源代码voidcreate(structxs*hd){intxh,gs,yy,wl,i;charxm[20];structxs*p;fr(hd);printf("\n 请输入学生个数:");scanf("%d",&num);for(i=0;i<num;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=(structxs*)malloc(sizeof(structxs));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();}增加记录源代码voidprint(structxs*hd){structxs*p;p=hd->next;if(p!=NULL){printf("\n\n");数据显示printf("**********************************************\n");printf("学号姓名高数英语物理printf("*************************************平均分\n");*********\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("%\n",(p->wl+p->wl+p->wl)/;p=p->next;}printf("**********************************************\n");printf(" 链表显示达成,请按任意键连续!\n");getch();}elseprintf("\n 当前链表为空,请先读取文件或创办链表!\n 按任意键连续!\n ");}盘问记录源代码voidmenu(){system("cls");printf(" ****************************************\n");printf("*学生成绩管理系统*\n") ;pri ntf("******************************* *********\n");printf("*jb11-131宋洁2012-7-3*\ n");pri ntf("******************************* *********\n");printf("*1-创办链表* \n") ;printf("*2-数据显示* \n") ;printf("*3-保存文件* \n") ;printf("*4-读取文件* \n") ;printf("*5-系统退出* \n") ;pri ntf("******************************* *********\n");printf("请选择操作(1-5:");}源程序#include""#include""#include<>#include""structxs{intxh;charxm[20];intgs,yy,wl;structxs*next;};intnum=0;structxs*init(){structxs*hd;hd=(structxs*)malloc(sizeof(structxs)); hd->next=NULL;returnhd;}voidfr(structxs*hd){structxs*p;p=hd->next;while(hd->next!=NULL){p=hd->next;hd->next=p->next;free(p);}}voidcreate(structxs*hd){intxh,gs,yy,wl,i;charxm[20];structxs*p;fr(hd);printf("\n 请输入学生个数:");scanf("%d",&num);for(i=0;i<num;i++){printf("请输入%d个学生o f%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=(structxs*)malloc(sizeof(structxs));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();}voidsave(structxs*hd){if(hd->next!=NULL){structxs*p=hd->next;inti;FILE*fp;fp=fopen("","w");fprintf(fp,"%3d\n",num);for(i=0;i<num;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 ");getch();}}voidread(structxs*hd){inti;structxs*p;FILE*fp;fr(hd);fp=fopen("","r");fscanf(fp,"%3d\n",&num);for(i=0;i<num;i++){p=(structxs*)malloc(sizeof(structxs));fscanf(fp,"%3d%12s%3d%3d%3d\n",p->xh,p->xm,p->gs,p->yy,p->wl);p->next=hd->next;hd->next=p;}fclose(fp);printf("\n读取文件达成,请按任意键连续!\n");getch();}voidprint(structxs*hd){structxs*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("%\n",(p->wl+p->wl+p->wl)/;p=p->next;}printf("**********************************************\n");printf(" 链表显示达成,请按任意键连续!\n");getch();}elseprintf("\n 当前链表为空,请先读取文件或创办链表!\n 按任意键继续!\n ");}voidmenu(){system("cls");printf(" ****************************************\n");printf("*学生成绩管理系统*\n") ;pri ntf("******************************* *********\n");printf("*jb11-131宋洁2012-7-3*\ n");pri ntf("******************************* *********\n");printf("*1-创办链表* \n") ;printf("*2-数据显示* \n") ;printf("*3-保存文件* \n") ;printf("*4-读取文件* \n") ;printf("*5-系统退出* \n") ;pri*******************************C语言程序设计基于链表格范例的学生成绩管理学习系统ntf("*********\n");printf("请选择操作(1-5:");}voidmain(){intxz=0;structxs*head;head=init();while(xz!=5){menu();scanf("%d",&xz);switch(xz){case1:create(head);break;case2:print(head);break;case3:save(head);break;case4:read(head);break;case5:printf("\n 系统退出,拜拜!\n ");break;default:printf("\n 选择错误,请按任意键选择!\n ");getch();break;}}fr(head);free(head);}3、试查收获经过此次试验,我掌握了链表的创办、遍历显示和除去功能,掌握了链表数据的文件保存、读取,可以熟练的使用VC++,对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语言程序设计实验学期 2012 至 2013 学年第二学期学生所在系部计算机学院年级 2012 专业班级计算机科学与技术B-123 学生姓名学号任课教师实验成绩计算机系制华北科技学院计算机系综合性实验报告实验报告须知1、学生上交实验报告时,必须为打印稿(A4纸)。
页面空间不够,可以顺延。
2、学生应该填写的内容包括:封面相关栏目、实验地点、时间、目的、设备环境、内容、结果及分析等。
3、教师应该填写的内容包括:实验成绩、教师评价等。
4、教师根据本课程的《综合性实验指导单》中实验内容的要求,评定学生的综合性实验成绩;要求在该课程期末考试前将实验报告交给任课教师。
综合性实验中,所涉及的程序,文档等在交实验报告前,拷贝给任课教师。
任课教师统一刻录成光盘,与该课程的期末考试成绩一同上交到系里存档。
5、未尽事宜,请参考该课程的实验大纲和教学大纲。
第 1 页华北科技学院计算机系综合性实验报告《C语言程序设计》课程综合性实验报告开课实验室:基础六 2013年7月1 日实验题目基于链表的学生成绩管理系统一、实验目的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、运行结果第 2 页华北科技学院计算机系综合性实验报告2.源代码:#include "stdio.h" #include "string.h" #include "stdlib.h" #include "conio.h" #include "malloc.h" struct xs{int xh;char xm[15];int gs,yy,wl;struct xs *next; };第 3 页华北科技学院计算机系综合性实验报告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;while(hd->next!=NULL){p=hd->next;hd->next=p;free(p);}}//释放void create(struct xs *hd) {char a[15];int xh,c,g,h,i;struct xs *p;fr(hd);printf("\n请输入学生个数\n");scanf("%d",&num);for(i=1;i<=num;i++){printf("第%d个学生of%d",i,num);printf("学号");第 4 页华北科技学院计算机系综合性实验报告scanf("%d",&xh);printf("名字");scanf("%s",&a);printf("高数");scanf("%d",&c);printf("英语");scanf("%d",&g);printf("物理");scanf("%d",&h);p=(struct xs*)malloc(sizeof(struct xs)); p->xh=xh;strcpy(p->xm,a);p->gs=c;p->yy=g;p->wl=h;p->next=hd->next;hd->next=p;}printf("录入完毕按任意键继续~ \n");getch();}//创建链表,输入成绩。
.华北科技学院计算机系综合性实验实验报告课程名称C语言程序设计实验学期2011 至2012 学年第二学期学生所在系部计算机系年级2011 专业班级计算机科学与技术B-111学生姓名学号任课教师实验成绩计算机系制实验报告须知1、学生上交实验报告时,必须为打印稿(A4纸)。
页面空间不够,可以顺延。
2、学生应该填写的内容包括:封面相关栏目、实验地点、时间、目的、设备环境、内容、结果及分析等。
3、教师应该填写的内容包括:实验成绩、教师评价等。
4、教师根据本课程的《综合性实验指导单》中实验内容的要求,评定学生的综合性实验成绩;要求在该课程期末考试前将实验报告交给任课教师。
综合性实验中,所涉及的程序,文档等在交实验报告前,拷贝给任课教师。
任课教师统一刻录成光盘,与该课程的期末考试成绩一同上交到系里存档。
5、未尽事宜,请参考该课程的实验大纲和教学大纲。
《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、运行结果主菜单数据显示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;代码:#include"stdio.h"#include"stdlib.h"#include<string.h>#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<num;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 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<num;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 ");getch();}}void read(struct xs *hd){int i;struct xs *p;FILE *fp;fr(hd);fp=fopen("yh.txt","r");fscanf(fp,"%3d\n",&num);for(i=0;i<num;i++){p=(struct xs *)malloc(sizeof(struct xs));fscanf(fp,"%3d %12s %3d %3d %3d\n",p->xh,p->xm,p->gs,p->yy,p->wl);p->next=hd->next;hd->next=p;}fclose(fp);printf("\n 读取文件完毕,请按任意键继续!\n ");getch();}void print(struct xs *hd){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();}elseprintf("\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:");}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;}}fr(head);free(head);}。