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

合集下载

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

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

部署步骤:安装 操作系统、安装 数据库、安装应 用软件等
维护方案:定期 备份数据、定期 检查系统、定期 更新软件等
系统维护方案
定期备份数据: 确保数据安全, 防止数据丢失
定期更新系统: 确保系统安全, 防止病毒和恶意 软件攻击
定期检查硬件: 确保硬件正常运 行,防止硬件故 障
定期培训员工: 确保员工熟悉系 统操作,提高工 作效率
06 系统测试与优化
单元测试
目的:验证单个模块或功能的正确 性
测试内容:功能测试、性能测试、 兼容性测试、安全性测试
添加标题
添加标题
添加标题
添加标题
测试方法:白盒测试、黑盒测试、 灰盒测试
测 试 工 具 : JU n it 、 Te s t NG 、 Selenium等
集成测试
目的:验证系统各模块间的接口和交互是否正常 测试方法:黑盒测试、白盒测试、灰盒测试 测试内容:功能测试、性能测试、安全测试、兼容性测试 测试工具:JMeter、Selenium、Appium等
系统性能优化
性能测试:使用自 动化工具进行性能 测试,如JMeter、 LoadRunner等
性能瓶颈分析:分 析性能测试结果, 找出性能瓶颈,如 数据库查询、网络 延迟等
性能优化:针对性 能瓶颈进行优化, 如优化数据库查询 、减少网络延迟等
性能监控:建立性 能监控体系,实时 监控系统性能,及 时发现和解决性能 问题
学生成绩管理系统是一个用 于管理学生成绩的软件系统
Байду номын сангаас
系统采用模块化设计,易于 维护和扩展
系统支持多种数据格式,如 Excel、CSV等,方便数据
导入和导出
系统目标
提高学生成绩管理效率 方便教师查询、统计和分析学生成绩 提供个性化学习建议和指导 促进家校沟通,提高家长对学生成绩的了解

学生成绩管理系统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语言程序设计-学生成绩管理系统

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语言学生成绩管理系统(链表版)

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.安全设置:系统具备安全设置功能,确保用户的信息安全,保证用户的登录权限,为系统及用户提供足够的安全保障,确保系统的数据安全。

四、系统分析系统分析阶段主要包含了分析及设计的步骤,为了更好的实现学生成绩管理的功能,系统分析中分析出学生信息、班级信息、考试信息等相关信息,以便为系统设计提供理论依据。

系统设计是系统分析的一个重要环节,通过设计,能够实现系统的功能,系统设计中定义出系统的基本流程及外部接口,使得系统能够正常运行。

五、系统实现六、系统测试学生成绩管理系统在功能测试过程中,通过实际的操作来测试学生成绩管理系统,测试的主要内容是系统的基本功能及系统的数据安全性,通过实际的操作,测试员可以详细的检查系统是否符合预期的功能,以及系统的正确度,从而保证系统的可靠性及安全性。

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

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

学生成绩管理系统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 模块设计为了实现功能需求中的各项功能,我们需要设计相应的模块来实现。

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语言-学生成绩管理系统-链表实现-源码」

#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+");//打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。

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

.华北科技学院计算机系综合性实验实验报告课程名称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);}。

相关文档
最新文档