学生信息管理系统实训报告(C语言版)

合集下载

c语言实习报告3篇

c语言实习报告3篇

c语言实习报告3篇c语言实习报告1在这个星期里,我们专业的学生在专业老师的带领下进行了c语言程序实践学习。

在这之前,我们已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,更多的在运用起来的时候还是感到很棘手,毕竟,万事开头难嘛。

由于时间的关系,我们的这次实践课程老师并没有给我们详细的介绍,只是给我们简单的介绍了几个比较重要的实际操作。

包括了程序模块处理.简单界面程序.高级界面程序.程序的添加修改.用程序做一元线性回归处理以及用c语言程序来画粒度分布图等这几样比较重要的时间操作。

上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正掌握它。

对于程序设计语言的.学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。

学习c程序设计语言除了课堂讲授以外,必须保证有不少于课堂讲授学时的上机时间。

因为学时所限,课程不能安排过多的上机实验,所以希望学生有效地利用课程上机实验的机会,尽快掌握用c语言开发程序的能力,为今后的继续学习打下一个良好的基础。

为此,我们结合课堂讲授的内容和进度,安排了12次上机实验。

课程上机实验的目的,不仅仅是验证教材和讲课的内容、检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面:1.加深对课堂讲授内容的理解课堂上要讲授许多关于c语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。

然而要使用c语言这个工具解决实际问题,又必须掌握它。

通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定。

对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,这是由于大部分学生是初次接触程序设计,缺乏程序设计的实践所致。

学习c语言不能停留在学习它的语法规则,而是利用学到的知识编写c语言程序,解决实际问题。

C语言学生信息管理系统报告(附有完整代码)

C语言学生信息管理系统报告(附有完整代码)

程序设计报告(2009/2010学年第二学期)题目:简单学生信息管理专业软件工程,NIIT,学生姓名 ******班级学号 ******指导教师 ******指导单位软件学院日期 2010-4-231-评分项成绩评遵守机房规章制度(5分) 上机时的表现(5分)学习态度(5分)程序准备情况(5分) 分程序设计能力(10分)团队合作精神(5分)课题功能实现情况(10分) 细算法设计合理性(10分)用户界面设计(10分)报告书写认真程度(5分) 则内容详实程度(10分)文字表达熟练程度(10分)回答问题准确度(10分)简短教师签名: 评语年月日评分等级备评分等级有五种:优秀、良好、中等、及格、不及格注2-学生管理系统一、课题内容和要求1、系统的基本功能实现学生信息的录入、查询和更新。

2、要求(1)从键盘上录入学生资料,并保存到文件中。

学生资料文件中的数据记录不得少于30条。

相关数据要求格式如下:学生资料存放了学号、姓名、性别、出生日期、A课程成绩、B课程成绩、C 文件课程成绩格式如下:B051001 张三女 19870201 80 82 77B051002 李四女 19870301 80 80 80B051003 王二男 19870401 85 80 80。

(2)可以随时补录学生资料。

(3)能够按照不同的条件查询学生信息,并显示在屏幕上。

a) 按学号排序b) 按姓名排序c) 按单科总分排序d) 按学号查找学生各门课成绩和平均分数e) 按姓名查找学生各门课成绩和平均分数f) 按学生总分排序g) 查询各门课程的平均分数3-二、需求分析需要设计并实现一个综合的学生信息管理系统,要求系统能实现以下功能:录入、查询和更新学生信息,并保存到文件中;学生资料文件中的数据记录不得少于30条;可以随时补录学生资料;可以按学号排序、按姓名排序、按单科总分排序、按学号查找学生各门课成绩和平均分数、按姓名查找各门课成绩和平均分数、按学生总分排序、实现各门课程的平均分数。

c语言学生信息管理系统总结

c语言学生信息管理系统总结

c语言学生信息管理系统总结
C语言学生信息管理系统是一个非常实用的项目,它可以帮助你掌握C语言的基本语法和数据结构,同时也可以提高你的编程技能和解决问题的能力。

在这个项目中,你需要设计和实现一个系统,该系统可以存储、检索、更新和删除学生信息。

以下是你在完成这个项目后可以获得的一些经验:
1. 数据结构和算法:你将需要使用各种数据结构(如数组、链表、树等)和算法来存储和操作学生信息。

通过这个项目,你将更好地理解这些数据结构和算法的工作原理,以及如何在实际应用中使用它们。

2. 文件I/O:你将需要从文件中读取学生信息,并将更新后的信息写回文件。

这将使你更好地理解文件I/O的原理,以及如何使用C语言的标准库函数进行文件操作。

3. 用户界面设计:你可能需要设计一个简单的用户界面,以便用户可以输入、检索和更新学生信息。

这将使你更好地理解如何使用C语言进行图形用户界面(GUI)编程。

4. 错误处理:在实际应用中,系统可能会出现各种错误,如文件读取错误、内存分配失败等。

通过这个项目,你将更好地理解如何使用C语言的异常处理机制(如setjmp和longjmp函数)来处理这些错误。

5. 代码优化和调试:当你编写代码时,可能会出现各种错误和问题。

通过调试和优化代码,你将更好地理解如何找到和解决问题,从而提高你的编程技能。

总之,完成C语言学生信息管理系统将使你更好地理解C语言的实际应用,并提高你的编程技能。

同时,这个项目也可以作为你未来职业生涯的一个很好的起点。

C语言实验报告-学生信息资源管理系统

C语言实验报告-学生信息资源管理系统

C语言实验报告一、问题描述编写一个信息管理系统,包括、性别、年龄、班级、**、地址、各科成绩等,要求能进行查找、排序和计算,按加权平均排序、按*一课程排序和按**排序。

二、分析问题,解决问题的步骤1、输入初始的学生信息:输入信息包括学生的、性别、年龄、班级、**、地址、各科成绩等相关信息;可用函数void input(STUDENT *data, int *len)来实现此操作。

2、成绩输出模块:输出学生的信息以及成绩void output(STUDENT *data, int len):通过学生的来查看学生的相关成绩,同时也可以分别通过caverage() 、maverage() 、eaverage() 和average() 来输出成绩的平均分数、最高和最低分数。

3、排序模块:用函数void sort(STUDENT *data, int len)来实现。

4、成绩查询模块:可用void find(STUDENT *data, int len) 来实现。

找到就输出此学生全部信息。

5、统计功能能:用函数void stat(STUDENT *data, int len) 来实现。

6、退出系统:可用一个函数e*it()来实现,首先将信息保存到文件中,释放动态创建的存空间,再退出此程序。

三、程序编写#include <stdlib.h>#include <stdio.h>#include <string.h>#define MA*N 35#define Ma*size325typedef struct student //学生信息{int no;char name[Ma*size];char se*[Ma*size];char age[Ma*size];char adress[Ma*size];char glassnum[Ma*size];double Chinese;double math;double English;double mark_ave;double mark_tot;} STUDENT;/*-----------输入信息子程序---------*/ void input(STUDENT *data, int *len) {int no;putchar('\n');printf("%s\n", "请输入新的记录,如果需要退出当前菜单请输入-1.");printf("%s\n", "格式:\n**\n");printf("%s\n", " 性别年龄地址班级 ** 语文数学英语");putchar('\n');printf("如:\n");printf("1\n");printf("三 93 95 89\n");scanf("%d", &no);while(no != -1) {data[*len].no = no;scanf("%s %s %s %s %s %lf %lf %lf", data[*len].name,&data[*len].se*,&data[*len].age,&data[*l en].adress,&data[*len].glassnum,&data[*len].Chinese,&data[*len].math,&data[*len].English);data[*len].mark_ave=(data[*len].Chinese+data[*len].ma th+data[*len].English)/3.0;data[*len].mark_tot=data[*len].Chinese+data[*len].mat h+data[*len].English;(*len)++;scanf("%d", &no);}/*---------------输出信息子程序---------------*/ void output(STUDENT *data, int len){int i;system("cls");printf("%8s", "");printf("%8s", "性别");printf("%8s", "年龄");printf("%8s", "地址");printf("%8s", "班级");printf("%8s", "语文");printf("%8s", "数学");printf("%10s", "英语");printf("%12s", "平均分");printf("%10s", "总分");putchar('\n');for (i =0; i < 80; i++)putchar('=');putchar('\n');for (i = 0; i< len; i++){printf("%8d", data[i].no);printf("%8s", data[i].name);printf("%8s", data[i].se*);printf("%8s", data[i].age);printf("%8s", data[i].adress);printf("%8s", data[i].glassnum);printf("%8.1lf", data[i].Chinese); printf("%8.1lf", data[i].math);printf("%10.1lf", data[i].English); printf("%12.1lf", data[i].mark_ave); printf("%10.1lf", data[i].mark_tot); putchar('\n');}for (i =0; i < 80; i++)putchar('=');putchar('\n');printf("按回车键继续.");getchar();getchar();}/*--------------排序子程序------------*/void sort(STUDENT *data, int len){int i,j,k;STUDENT temp;for (i=0; i<len-1; i++) {for (k=i, j=i+1; j<len; j++)if (data[k].mark_ave > data[j].mark_ave) k=j;if (k != i) {temp = data[i];data[i] = data[k];data[k] = temp;}}}/*--------------------查询子程序-----------------------*/ void find(STUDENT *data, int len){int find_no, result ;int i;lab: result=0;printf("%s\n", "请输入需要查找的学生的**,退出当前菜单请输入 -1.");scanf("%d", &find_no);if (find_no == -1) return; /*e*it the fine sub program*/while( data[result].no != find_no && result < len) result ++;if (result >= len ) {printf("%s\n", "未查询到相关信息");goto lab;}else {system("cls");printf("%s\n", "查询信息如下:");for (i =0; i < 80; i++)putchar('=');putchar('\n');printf("%8s", "**");printf("%8s", "");printf("%8s", "性别");printf("%8s", "年龄");printf("%8s", "地址");printf("%8s", "班级");printf("%8s", "语文");printf("%8s", "数学");printf("%10s", "英语");printf("%12s", "平均分");printf("%10s", "总分");putchar('\n');printf("%8d", data[result].no);printf("%8s", data[result].name);printf("%8s", data[result].se*);printf("%8s", data[result].age);printf("%8s", data[result].adress);printf("%8s", data[result].glassnum);printf("%8.1lf", data[result].Chinese);printf("%8.1lf", data[result].math);printf("%10.1lf", data[result].English);printf("%12.1lf", data[result].mark_ave);printf("%10.1lf", data[result].mark_tot);putchar('\n');for (i =0; i < 80; i++)putchar('=');putchar('\n');goto lab;}}/*---------------统计子程序------------*/void stat(STUDENT *data, int len){int no_59=0, no_69=0, no_79=0, no_89=0, no_100=0; int i;for (i = 0;i < len; i++) {if (data[i].mark_ave <=59) no_59++;else if (data[i].mark_ave <=69) no_69++;else if (data[i].mark_ave <=79) no_79++;else if (data[i].mark_ave <= 89) no_89++;else no_100++;}system("cls");for (i =0; i < 80; i++)putchar('=');putchar('\n');printf("%10s", "分数");printf("%10s", "0--59"); printf("%10s", "60--69"); printf("%10s", "70--79"); printf("%10s", "80--89"); printf("%10s", "90--100");putchar('\n');putchar('\n');printf("%10s", "学生");printf("%10d", no_59);printf("%10d", no_69);printf("%10d", no_79);printf("%10d", no_89);printf("%10d", no_100);putchar('\n');for (i =0; i < 80; i++)putchar('=');putchar('\n');printf("按回车键返回");getchar();getchar();}/*---------------显示信息子程序------------*/void paint(){int i;system("cls");printf("%55s\n", "信计二班学生成绩管理系统\n");printf(" 制作者: ** \n");for (i = 0; i < 80; i++)putchar('=');putchar('\n');printf(" 1 输入信息 2 输出信息\n");printf(" 3 按平均分排序 4 按**查找\n");printf(" 5 按平均分输出统计信息 6 保存到文件\n");printf(" 0 退出\n");for (i = 0; i<= 79; i++)putchar('=');putchar('\n');printf("%s\n", "请输入各操作对应的序号:");}void save(STUDENT *data, int len)//将数据保存到文件{int i;FILE *fp;fp=fopen("成绩统计表.t*t","w");fprintf(fp,"%8s", "**");fprintf(fp,"%8s", "");fprintf(fp,"%8s", "性别");fprintf(fp,"%8s", "年龄");fprintf(fp,"%8s", "地址");fprintf(fp,"%8s", "班级");fprintf(fp,"%8s", "语文");fprintf(fp,"%8s", "数学");fprintf(fp,"%10s", "英语");fprintf(fp,"%12s", "平均分");fprintf(fp,"%10s\n", "总分");fprintf(fp,"=============================================== =========================\n");putchar('\n');for (i = 0; i< len; i++)fprintf(fp,"%8d", data[i].no);fprintf(fp,"%8s", data[i].name);fprintf(fp,"%8s", data[i].se*);fprintf(fp,"%8s", data[i].age);fprintf(fp,"%8s", data[i].adress);fprintf(fp,"%8s", data[i].glassnum);fprintf(fp,"%8.1lf", data[i].Chinese);fprintf(fp,"%8.1lf", data[i].math);fprintf(fp,"%10.1lf", data[i].English);fprintf(fp,"%12.1lf", data[i].mark_ave);fprintf(fp,"%10.1lf\n", data[i].mark_tot);}fprintf(fp,"=============================================== =========================\n");fclose(fp);printf("文件已保存到\"成绩统计表.t*t\"");getchar();getchar();}/*-----------主程序--------------*/void main()STUDENT data[MA*N];int len = 0;char ctrl_ch;paint();scanf("%c", &ctrl_ch);while (ctrl_ch != '0') {; case '1':input(data, &len);break;case '2':output(data, len);break;case '3':sort(data, len);break;case '4':find(data, len);break;case '5':insert(data, &len);break;case '6':delete_item(data, &len);break;case '7':stat(data, len);break;case '8':save(data, len);break;default:if (ctrl_ch != '\n') printf("%s\n", "输入错误!");break;}if (ctrl_ch != '\n') paint();scanf("%c", &ctrl_ch);}}四、误差分析此程序没有按加权平均排序功能是本程序的一大弊端,还有就是所列科目少了点,由于本课题中的许多知识点都没有学过,需要查找课外资料,所以如有错误,希望老师多多指正,!。

c语言课程信息管理系统实训总结

c语言课程信息管理系统实训总结

C语言课程信息管理系统实训总结一、项目背景1.1 项目目的本次实训的项目是为了让学生通过实践的方式提高C语言编程能力,了解信息管理系统的设计与实现。

1.2 项目内容通过本次实训,学生需要设计和实现一个基于C语言的课程信息管理系统,包括学生信息管理、课程信息管理、成绩管理等功能模块。

1.3 项目意义通过这个项目,学生将掌握C语言编程的基本技巧,加深对信息管理系统的理解,提高问题分析和解决能力。

二、项目实施过程2.1 项目需求分析在项目开始之前,首先进行了对需求的分析,明确了系统需要实现的功能模块和具体需求,为后续的开发工作奠定了基础。

2.2 系统设计基于需求分析的基础上,进行了系统的整体设计和模块设计,确定了系统的架构和各个模块之间的关系,明确了每个模块的功能和实现方式。

2.3 编码实现在系统设计完成后,学生开始进行编码实现,根据设计文档和模块需求进行编码工作,实现每个功能模块的具体逻辑。

2.4 测试调试编码实现完成后,进行了系统的测试和调试工作,确保系统的稳定性和功能的正确性,对系统进行了全面的测试覆盖。

三、项目总结与反思3.1 项目成果通过本次实训,学生们成功地设计并实现了一个完整的C语言课程信息管理系统,包括学生信息管理、课程信息管理、成绩管理等功能模块,实现了项目的预期目标。

3.2 学习收获通过这个项目,学生们不仅加深了对C语言编程的理解和掌握,还了解了信息管理系统的设计和实现方法,培养了问题分析和解决能力,提高了团队协作能力。

3.3 反思与展望在项目实施的过程中,我们也发现了一些问题和不足,比如需求分析不够清晰、部分模块设计不够合理等,对这些问题进行了总结和反思,并为未来的项目实施提出了改进和完善的建议。

四、结语通过本次C语言课程信息管理系统实训,学生们不仅掌握了C语言编程的基本技巧,而且加深了对信息管理系统的理解,提高了问题分析和解决能力。

希望学生们能够将实训中所学到的知识应用于实际工作中,不断提高自己的技术水平,为未来的职业发展打下坚实的基础。

c语言学生信息管理系统总结

c语言学生信息管理系统总结

C语言学生信息管理系统总结简介C语言学生信息管理系统是一个用于管理学生个人信息的程序。

通过该系统,用户可以添加、删除、修改和查询学生的姓名、年龄、性别和学号等信息。

本文将对该系统的设计和实现进行总结。

设计思路功能设计学生信息管理系统应具备以下基本功能:1.添加学生信息:用户可以输入学生的姓名、年龄、性别和学号等信息,并将其添加到系统中。

2.删除学生信息:用户可以通过输入学生的学号,从系统中删除该学生的信息。

3.修改学生信息:用户可以通过输入学生的学号,对系统中该学生的信息进行修改。

4.查询学生信息:用户可以通过输入学生的姓名或学号,在系统中查找并显示学生的信息。

数据结构设计为了实现学生信息的管理,我们可以使用以下数据结构:struct student {char name[20];int age;char gender[10];int id;};每个学生的信息将保存在一个student结构体中,其中包含了姓名、年龄、性别和学号等字段。

学生信息可以使用链表来管理,每个节点包含一个学生的信息和指向下一个节点的指针。

struct node {struct student data;struct node *next;};通过使用链表,我们可以方便地进行添加、删除和修改操作。

界面设计学生信息管理系统的界面应简洁明了,用户可以通过命令行进行操作。

每个操作都对应一个数字或字母,用户输入相应的数字或字母来执行对应的操作。

实现过程添加学生信息添加学生信息的实现过程如下:1.用户输入要添加的学生的姓名、年龄、性别和学号等信息。

2.创建一个新的节点,并将用户输入的学生信息保存到该节点中。

3.将新节点添加到链表的末尾,更新链表的指针。

删除学生信息删除学生信息的实现过程如下:1.用户输入要删除的学生的学号。

2.遍历链表,找到对应学号的节点。

3.如果找到了对应的节点,将该节点从链表中删除。

4.释放节点的内存空间,更新链表的指针。

c语言实验报告(学生学籍管理系统)[1]

c语言实验报告(学生学籍管理系统)[1]

学生学籍管理系统一、实验要求:一个班级有若干名学生(不超过10名),共有三门课程,分别是语文、数学、英语,要求编写一个成绩的管理系统,每个学生要求有学号、姓名、性别、三门课的成绩以及平均成绩,要实现从键盘上输入学号(必须为数字)、姓名、性别、三门课程的成绩,并求每一位学生的平均成绩(即每一行的平均值)、每一位学生的最高分(每一行的最大值),求每一门课程的平均分(即每一列的平均值)、每一门课的最高分(即每一列的最大值),并输出全部结果。

根据学生的平均成绩进行排序,对语文、数学、英语成绩进行排序,并输出排序结果,排序必须使用冒泡排序法。

并且具有如下的菜单:学生学籍管理系统***********************MENU***********************1、Enter new data2、Browse all3、Search by num4、Order by average5、Exit***************************************************用户可以根据菜单来选择操作,菜单的含义如下:1、Enter new data 输入新数据2、Browse al 浏览所有数据3、Search by num 根据学号查询学生信息4、Order by average 根据平均成绩排序5、Exit 退出系统实验步骤:二、实验目的1、了解和熟悉Visual C++软件编程开发环境2、熟练掌握结构化程序设计的步骤和模块化设计方法3、熟练掌握C语言数据类型,熟记字符型数据和整形数据的定义和使用4、熟练掌握用while语句、do…while语句和for语句实现循环结构程序设计的方法5、掌握一维数组、二维数组的定义、赋值和输入输出的方法6、掌握与数组有关的算法(特别是排序算法,熟练掌握冒泡排序法)7、熟悉函数的定义、声明方法及全局变量和局部变量的概念与用法,掌握函数的调用方法8、掌握结构体类型变量的定义和使用及结构体类型数组的概念和应用三、实验步骤1、分析设计题目:根据题目要求,可以使用结构体数组来存储学生的信息,包括学号、姓名、性别、各科成绩、平均成绩五个成员,分别使用字符数组、整型数组、浮点型变量来表示。

C语言学生信息管理系统实验报告

C语言学生信息管理系统实验报告

C语言学生信息管理系统实验报告 -C语言学生信息管理系统实验报告一、实验目的本次实验旨在通过C语言编程实现一个简单的学生信息管理系统,以帮助学生更好地理解和掌握C语言的基本语法、数据类型、程序控制结构以及文件操作等知识点。

同时,通过实际操作,提高学生的编程能力和问题解决能力。

二、实验内容1、系统的基本功能:实现学生信息的输入、存储、查询、修改和删除等操作。

2、数据存储方式:使用文件存储学生信息,保证数据的持久性。

3、用户界面:实现一个简单的命令行界面,方便用户进行操作。

三、实验步骤及实现1、打开一个新文件,命名为“student_info.txt”,用于存储学生信息。

2、定义一个结构体,包含学生的基本信息,如学号、姓名、年龄、性别等。

3、编写程序,实现学生信息的输入、存储和输出。

4、编写程序,实现学生信息的查询、修改和删除操作。

5、在命令行界面中,使用scanf函数获取用户输入的指令,并根据指令执行相应的操作。

6、在操作结束后,将结果显示在命令行界面上。

四、实验结果与分析1、学生信息管理系统的基本功能已经实现,可以正常进行学生信息的输入、存储、查询、修改和删除等操作。

2、使用了文件操作函数,可以将学生信息持久化存储,避免了每次运行程序都需要重新输入信息的麻烦。

3、通过实际操作,学生对C语言的基本语法、数据类型、程序控制结构以及文件操作等知识点有了更深入的理解和掌握。

五、实验总结与建议1、在实现学生信息管理系统时,需要注意数据的正确性和完整性,尤其是输入数据时需要做好错误处理。

2、在实现系统功能时,可以进一步优化代码,提高程序的效率和可读性。

3、可以增加更多的功能,如统计学生人数、打印学生信息等,以使系统更加完善。

4、在实际应用中,需要考虑系统的安全性和稳定性,如数据的备份和恢复、系统的异常处理等。

通过本次实验,学生对C语言有了更深入的理解和掌握,同时提高了编程能力和问题解决能力。

建议在今后的实验中,注重理论与实践相结合,提高学生的实际应用能力。

C语言学生管理系统综合实验报告

C语言学生管理系统综合实验报告

C语言学生管理系统综合实验报告##一、实验目的本实验旨在设计和实现一个简单的学生管理系统,使用C语言编写,帮助学生了解C语言常用的数据结构和文件操作,并能够实际应用在实际的学生管理中。

##二、实验内容本实验要求设计一个学生管理系统,能够完成以下功能:1.添加学生信息:包括学号、姓名、性别、年龄等基本信息;2.修改学生信息:根据学号修改学生的基本信息;3.删除学生信息:根据学号删除学生的信息;4.查询学生信息:根据学号或姓名查询学生的信息;5.显示全部学生信息:将所有学生的信息显示出来;6.保存学生信息到文件:将学生的信息保存到文件中;7.从文件读取学生信息:从文件中读取学生的信息。

##三、实验设计###数据结构设计在设计学生管理系统时,我们需要选择合适的数据结构来存储学生的信息。

本实验中,我们选择使用结构体来表示学生的信息,代码如下:```cstruct Studentint id; // 学号char name[20]; // 姓名char gender[5]; // 性别int age; // 年龄};```###功能实现根据实验要求,我们需要实现添加、修改、删除、查询、显示和文件操作等功能。

以下是具体实现的思路:1.添加学生信息:从用户输入获取学生的信息,并将其添加到学生数组中;2.修改学生信息:根据用户输入的学号,在学生数组中找到对应的学生信息,并更新其基本信息;3.删除学生信息:根据用户输入的学号,在学生数组中找到对应的学生信息,并将其删除;4.查询学生信息:根据用户输入的学号或姓名,在学生数组中找到对应的学生信息,并将其显示出来;5.显示全部学生信息:遍历学生数组,将所有学生的信息显示出来;6.保存学生信息到文件:将学生数组中的所有学生信息保存到文件中;7.从文件读取学生信息:从文件中读取学生信息,并将其存储到学生数组中。

##四、实验结果经过实验的设计与实现,我们成功完成了学生管理系统的编写,并进行了测试。

c语言学生信息管理系统实训报告

c语言学生信息管理系统实训报告

c语言学生信息管理系统实训报告
C语言学生信息管理系统是以C语言为编程语言开发的数据管理系统,该系统基于数
据库技术,实现了人事档案管理、班级管理、成绩管理、考勤管理及学生信息管理等功能。

本次实训,我使用C语言编程,在Visual Studio2017环境下,实现了一种自定义的
学生信息管理系统。

该系统实现学生信息的查询、删除、添加及修改功能。

在项目的开发
过程中,我也使用了文件读取与保存、数据结构训练、数据处理等编程技术。

其中,采用
C语言处理文本文件,用链表结构组织数据,并实现增删改查等功能;使用链表结构处理学生信息,实现数据的添加、修改和删除等操作;使用文件读取及保存,在开发过程中
记录及复用学生信息,并按要求输出学生信息报表;使用数据结构进行数据处理,通过
数据的排序、查找等操作,实现提高学生管理的效率。

实训过程运用C语言基础知识和结构化编程思想,巩固了编写程序的知识和编程技术,让我更加深入地理解面向对象思想。

在实训过程中,我熟练掌握了if语句、while语句、switch语句等基础编程语句,加深了对编程概念的理解,同时也学会了在实际编程中如何把这些概念运用到编程中,从而熟练掌握C语言的编程技巧。

实训结束时,我认为自己在编程方面有了很大的进步,对C语言的编程也有了更深的
理解,同时自己也掌握了一套独立的编程思维,并能够利用面向对象思想,实现学生信息
管理系统客户端最新需求。

学生系统 c 实验报告

学生系统 c 实验报告

学生系统c 实验报告引言学生管理系统是一种用于管理学生信息的软件,它能够帮助学校、教育机构以及各类培训机构对学生的信息进行存储、查询和管理。

在本次实验中,我们使用C 语言设计并实现了一个简单的学生系统,通过该系统可以进行学生信息的新增、修改、查询和删除等操作。

设计思路在本次实验中,我们采用了模块化的设计思路,将学生系统分为学生信息管理模块、数据库模块和用户界面模块。

学生信息管理模块该模块用于处理学生信息相关的操作,包括增加学生信息、修改学生信息、查询学生信息和删除学生信息等功能。

为了方便之后的扩展性,我们将学生信息的数据结构定义为一个结构体,包括学生姓名、学号、性别和年龄等信息。

在学生信息管理模块中,我们通过链表的方式进行数据的存储和管理。

数据库模块数据库模块用于实现学生信息的持久化,将学生信息存储到磁盘文件中,以便之后的读取和修改操作。

在本次实验中,我们采用了文本文件的方式实现数据库模块,将学生信息保存为文本格式,并通过文件操作函数对数据进行读写。

用户界面模块用户界面模块用于实现与用户的交互,包括菜单显示、用户输入和信息输出等功能。

我们通过命令行界面的方式设计用户界面,用户可以通过输入对应的命令来操作学生信息。

实验结果经过实验的设计和编码,我们成功实现了一个简单的学生系统。

用户可以通过菜单选择不同的操作,进行学生信息的增删改查。

系统在运行时可以正常读取和保存学生信息,并且能够根据用户的选择执行相应的操作。

实验总结通过本次实验,我们深入理解了学生系统的设计思路和实现过程。

学会了如何使用C 语言进行模块化设计,分解问题并解决问题。

同时,我们也对文件操作和链表数据结构有了更深入的了解和掌握。

在实验过程中,我们也遇到了一些问题和挑战,比如对学生信息的输入和验证、文件读写的处理和用户界面的设计等。

通过不断的调试和优化,我们最终完成了系统的开发和测试。

通过本次实验,我们不仅提高了编程能力和解决问题的能力,还加深了对学生系统的理解和应用。

学生信息管理系统C语言报告

学生信息管理系统C语言报告

学生信息管理系统C语言报告简介学生信息管理系统是一种可以对学生信息进行管理的软件系统。

通过该系统,可以方便地添加、修改、查询和删除学生信息,提高学生信息管理的效率和准确性。

本报告将介绍学生信息管理系统的设计和实现过程,包括系统功能、技术选型和代码结构等方面。

通过该报告的阅读,读者可以了解到该系统的开发背景和主要功能,以及查看源代码和运行效果。

系统功能学生信息管理系统的主要功能如下:1. 添加学生信息:可以输入学生的姓名、年龄、性别、学号等基本信息,并保存到系统中。

2. 修改学生信息:可以根据学生的学号或姓名,修改学生的基本信息。

3. 查询学生信息:可以根据学生的学号、姓名、年龄、性别等条件,查询学生的基本信息。

4. 删除学生信息:可以根据学生的学号或姓名,将学生的基本信息从系统中删除。

技术选型为了实现学生信息管理系统的需求,我们选择使用C语言进行开发。

C语言是一种高效、可靠的编程语言,有着丰富的开发资源和庞大的用户群体。

在开发过程中,我们采用了以下技术选型:- 编程语言:C语言C语言作为一种结构化的编程语言,具有强大的计算能力和灵活的控制语句,非常适合开发类似学生信息管理系统这样的小规模应用。

代码结构学生信息管理系统的代码结构如下:cinclude <stdio.h>struct Student {char name[50];int age;char gender[10];int student_id;};void add_student(struct Student *students, int *count) {添加学生信息的代码逻辑}void modify_student(struct Student *students, int count) {修改学生信息的代码逻辑}void query_student(struct Student *students, int count) {查询学生信息的代码逻辑}void delete_student(struct Student *students, int *count) {删除学生信息的代码逻辑}int main() {struct Student students[100];int count = 0;主程序逻辑,包括用户界面等}在代码结构中,我们定义了一个`Student`结构体,用于存储学生的基本信息。

C语言上机实验报告--学生信息管理系统设计__内附源代码

C语言上机实验报告--学生信息管理系统设计__内附源代码

C语言上机实验报告------学生信息管理系统设计姓名:学号:班级:指导老师:学院:学校:C语言上机实验报告------学生信息管理系统设计一、实验题目学生信息管理系统设计学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail 等。

试设计一学生信息管理系统,使之能提供以下功能:(1)系统以菜单方式工作(2)学生信息录入功能(学生信息用文件保存)---输入(3)学生信息浏览功能---输出(4)查询、排序功能---算法(5)按学号查询(6)按姓名查询(7)学生信息的删除与修改(可选项)二、本课程的地位、作用与目的为综合应用C语言程序设计理论知识、进一步提高学生综合解决问题、协调工作的能力和良好的软件开发习惯,特安排本实验内容。

希望通过该实习能够进一步激发学生的学习热情,培养学生初步编程的能力,为后续的学习和发展奠定基础。

三、分析过程1、能够实现对学生基本信息数据的增加和删除2、实现对录入保存后的学生基本信息进行格式化浏览3、提供学号和姓名两种方式对学生基本信息数据的查询4、能够对随机输入的学生基本信息数据按学号进行排序5、学生信息数据保存在文件中,方便数据的多次使用为了实现以上功能,必须设计的函数如下:录入函数、查询函数(分为姓名查询和学号查询)、删除函数、排序函数和几个菜单绘制函数等四、实验源代码:#include <stdio.h>#include<string.h>#include<conio.h>#include<stdlib.h>#include<time.h>#define num 12//定义学生结构体typedef struct student{int id;char name[num];int age;char sex[4];struct birth{int year;int month;int day;}date;char add[30];int phone;}stu;//功能选择菜单void menu(){printf("\n");printf("\n");printf(" 学生信息管理系统\n");printf("\n");printf("********************************************************************* **\n");printf(" ==============1.学生信息录入 2.学生信息浏览===============\n");printf("\n");printf(" ==============3.学号查询信息 4.姓名查询信息===============\n");printf("\n");printf(" ==============5.按学号排序 6.删除学生信息===============\n");printf("\n");printf(" ============== 0.退出系统===============\n");printf("\n");printf("\n");printf("********************************************************************* *\n");printf("\n");printf(" 按编号选择对应功能\n");printf("\n");printf(" +++++++++++++++++++ XXXXXXX制作+++++++++++++++++++++\n");printf("\n");}//修改菜单void printmenu(){printf("********************************************************* **\n");printf("-------1.完全修改 2.学号修改---------");printf("-------3.姓名修改 4.性别修改---------");printf("-------5.生日修改 6.地址修改---------");printf("-------7.电话修改 0.退出修改---------");printf("********************************************************* **\n");}//取当前时间int nowtime(){struct tm *local;time_t t;t=time(NULL);local=localtime(&t);return local->tm_year+1900;//求出当前时间的年份}//输出文件中学生信息void print(char *file){stu temp;FILE *fp=fopen(file,"r");if(fp==NULL){printf("打开文件%s失败!\n",file);return;}printf("文件%s中学生信息如下:\n",file);printf("%8s%8s%6s%6s%8s%4s%4s%16s%12s\n","学号","姓名","年龄","性别","出生年","月","日","地址","电话");fseek(fp,0,SEEK_SET);//从文件开始为之读取while(fread(&temp,sizeof(stu),1,fp))printf("%8d%8s%6d%6s%8d%4d%4d%16s%12d\n",temp.id,,temp.age,t emp.sex,temp.date.year,temp.date.month,temp.date.day,temp.add,temp.ph one);//格式化输出学生信息fclose(fp);//关闭文件}void luru(char *file){int count,sexnum,i=0,m;stu temp,temp1;FILE *fp=fopen(file,"a+");//追加方式打开文件if(fp==NULL){printf("打开文件%s失败!",file);return;}printf("请确定本次需要录入几名学生信息:");scanf("%d",&count);for (i=0;i<count ;i++ ){printf("录入要写入文件%s的第%d名学生信息\n",file,i+1); Repeat:printf("请输入学号:");m=scanf("%d",&temp.id);if (m==0){printf("输入的数据不是整型数据!\n");fflush(stdin);//清除缓存goto Repeat;}fseek(fp,0,SEEK_SET);//从文件开始位置读取while(fread(&temp1,sizeof(stu),1,fp)){if (temp1.id==temp.id)//判断学号是否已存在{printf("学号已存在!\n");goto Repeat;}//若学号已存在,返回继续读取学号}printf("请输入姓名:");scanf("%s",);printf("请输入性别:0为女生,1为男生:");{scanf("%d",&sexnum);if (sexnum==1) strcpy(temp.sex,"男");else strcpy(temp.sex,"女");}printf("请输入出生年月日:");scanf("%d%d%d",&temp.date.year,&temp.date.month,&temp.date.day);temp.age=nowtime()-temp.date.year;printf("请输入地址:");scanf("%s",&temp.add);printf("请输入联系电话11位:");scanf("%d",&temp.phone);if(!fwrite(&temp,sizeof(stu),1,fp)){printf("向文件%s写入信息失败!\n",file);return;}}printf("向文件%s写入信息成功!\n",file);fclose(fp);}int IsEmpty(FILE *fp){int len;fseek(fp,0,SEEK_END);//指针移动到文件尾len=ftell(fp);//取指针的文职获取长度return(len==0)?1:0;//0代表文件为空}void idsearch(char *file){int findid;stu temp;FILE *fp=fopen(file,"r");if (fp==NULL){printf("文件无法打开!");return;}if(IsEmpty(fp)){printf("文件为空,请先录入信息!");return;}printf("输入要查找学生的学号:");scanf("%d",&findid);fseek(fp,0,SEEK_SET);while(fread(&temp,sizeof(stu),1,fp)){if(temp.id==findid){printf("%8s%8s%6s%6s%8s%4s%4s%16s%11s\n","学号","姓名","年龄","性别","出生年","月","日","地址","电话");printf("%8d%8s%6d%6s%8d%4d%4d%16s%11d\n",temp.id,,temp.a ge,temp.sex,temp.date.year,temp.date.month,temp.date.day,temp.add,tem p.phone);//格式化输出学生信息return;}}printf("没有找到学号为%d的学生的信息!",findid);return;fclose(fp);}void namesearch(char *file){char name[num];stu temp;FILE *fp=fopen(file,"r");if (fp==NULL){printf("文件无法打开!");return;}if(IsEmpty(fp)){printf("文件为空,请先输入学生信息!");return;}printf("输入要查找的学生的姓名:");scanf("%s",name);fseek(fp,0,SEEK_SET);while(fread(&temp,sizeof(stu),1,fp)){if (!strcmp(,name)){printf("下面是姓名为%s的学生的信息:\n",name);printf("%8s%8s%6s%6s%8s%4s%4s%16s%11s\n","学号","姓名","年龄","性别","出生年","月","日","地址","电话");printf("%8d%8s%6d%6s%8d%4d%4d%16s%11d\n",temp.id,,temp.a ge,temp.sex,temp.date.year,temp.date.month,temp.date.day,temp.add,tem p.phone);//格式化输出学生信息return;}}printf("没有找到姓名为%s的学生的信息!",name);fclose(fp);}//排序函数void paixu(char *file){int i,j,k,len;stu s[num],temp;FILE *fp=fopen(file,"r");if(fp==NULL){printf("文件无法打开!");return;}if(IsEmpty(fp)){printf("文件为空,请先录入信息!");return;}fseek(fp,0,SEEK_END);//指针移动到文件末尾len=ftell(fp)/sizeof(stu);fseek(fp,0,SEEK_SET);for(i=0;i<len;i++)fread(s+i,sizeof(stu),1,fp);fclose(fp);for(i=0;i<len;i++){k=i;for(j=i+1;j<len;j++){if(s[j].id<s[k].id)k=j;}if(k!=i){temp=s[i];s[i]=s[k];s[k]=temp;}}printf("下面是按学号从小到大顺序排序后的学生的信息:\n");printf("%8s%8s%6s%6s%8s%4s%4s%16s%11s\n","学号","姓名","年龄","性别","出生年","月","日","地址","电话");for(i=0;i<len;i++)printf("%8d%8s%6d%6s%8d%4d%4d%16s%11d\n",s[i].id,s[i].name,s[i].a ge,s[i].sex,s[i].date.year,s[i].date.month,s[i].date.day,s[i].add,s[i ].phone);//格式化输出学生信息remove("学生信息表.txt");//删除以前存放数据的文件fp=fopen(file,"w");for(i=0;i<len;i++)fwrite(s+i,sizeof(stu),1,fp);fclose(fp);}//删除函数void shanchu(char *file){int i=0,len,del;stu s[num];FILE *fp=fopen(file,"r");if(fp==NULL){printf("文件无法打开!");return;}if(IsEmpty(fp)){printf("文件为空,请先录入学生信息!");return;}printf("输入需要删除的学生的学号:");scanf("%d",&del);fseek(fp,0,SEEK_SET);while(fread(s+i,sizeof(stu),1,fp)){if(s[i].id==del){printf("下面是按学号为%d的学生的信息:\n",del);printf("%8s%8s%6s%6s%8s%4s%4s%16s%11s\n","学号","姓名","年龄","性别","出生年","月","日","地址","电话");printf("%8d%8s%6d%6s%8d%4d%4d%16s%11d\n",s[i].id,s[i].name,s[i].a ge,s[i].sex,s[i].date.year,s[i].date.month,s[i].date.day,s[i].add,s[i ].phone);//格式化输出学生信息i=i-1;}i++;}fclose(fp);len=i;fp=fopen(file,"w");fseek(fp,0,SEEK_SET);for(i=0;i<len;i++) //删除后重写文件fwrite(s+i,sizeof(stu),1,fp);fclose(fp);}void main(){int key;char file[]={"学生信息表.txt"};do{menu();printf("选择对应功能操作:");scanf("%d",&key);switch(key){case 1:luru(file);break;case 2:print(file);break;case 3:idsearch(file);break;case 4:namesearch(file);break;case 5:paixu(file);break;case 6:shanchu(file);break;case 0:exit(0);default:printf("选择错误,请重新选择!");}printf("\n");printf("按任意键返回上级菜单!");getch();fflush(stdin);system("cls");}while (key!=0);}五.实验过程及结果:1.程序主菜单运行界面2.学生信息录入运行界面3.学生信息浏览运行界面4.学生学号查询运行界面5.学生姓名查询运行界面6.按学号排序运行界面第一次出现乱码,改正后运行如第二张图片所示7.删除学生信息运行界面六、感想在本次实验的过程中,出现了各种各样的问题。

c语言学生系统报告

c语言学生系统报告

c语言学生系统报告学生管理系统是管理学校学生信息的一个重要工具。

本系统使用C语言编写,实现了对学生信息的管理、增加、修改和查询功能,方便教师管理每个学生的个人信息和学习情况。

系统可以提高教师工作效率和管理水平,并能够迅速地处理学生信息,提高办公效率和工作效率。

一、需求分析此次系统的开发,主要是为了解决手动管理学生信息所带来的繁琐问题,达到高效的管理方式,实现以下需求:(1)方便快捷的输入、查询和管理学生信息。

(2)能够记录学生每次考试的成绩情况,方便教师进行评估。

(3)能够显示学生的年龄、性别、所在班级等信息,方便教师查看。

二、设计思路针对以上需求,设计了如下的系统结构:(1)数据采集模块:该模块用于对学生的基本信息进行录入,包括学生的姓名、年龄、性别、学号和班级等。

(2)数据管理模块:该模块用于对学生信息进行增加、修改和删除功能,实现对学生信息的管理。

(3)数据查询模块:该模块能够根据学生姓名、学号、班级等信息进行查询,方便教师快速查找学生信息。

三、系统功能实现(1)录入学生信息首先,系统需要录入学生的基本信息,包括学生的姓名、年龄、性别、学号和班级等,这些信息是后续管理工作的基础,教师需要认真核对每个学生的信息。

录入学生信息时,需要输入如下信息:姓名:请输入学生的姓名性别:请输入学生的性别(男/女)班级:请输入学生所在的班级在学生信息录入之后,系统需提供对学生信息的管理功能,包括增加、修改和删除功能。

教师可以根据需要对学生信息进行修改和删除操作。

具体功能如下:增加学生信息:在已有的信息中增加新学生信息。

修改学生信息:修改学生信息,如姓名、学号、年龄、性别、班级等。

删除学生信息:删除一位或多位学生的信息。

在系统中,教师可以根据关键字查询学生信息,包括学生姓名、学号、班级等信息。

系统会返回符合条件的学生记录。

具体查询功能如下:按姓名查询:输入学生姓名,返回该学生的所有信息。

建立查询、删除、增加和修改菜单方便用户进行操作。

C语言学生管理系统综合实验报告

C语言学生管理系统综合实验报告
printf("%-13s",stu[c].name);
printf("%-8s",stu[c].sex);
printf("%-16s",stu[c].clas);
printf("%-6d",stu[c].yw);
printf("%-6d",stu[c].sx);
printf("%-4d",stu[c].yy);
printf("\n");
}
printf("----------------------------------------------------------------\n");
}
void cx()
{
int count=0;
char str[10];
printf("\n请输入要查询的学生学号:");
i++;
printf("\t是否继续输入数据(Y.N)");cin>>x;
if(x=='n'||x=='N') break;
}
}
void EditData()
{
int count=0;
char str[10];
printf("\n请输入学生学号:");
cin>>str;
while (count<i)
printf("%-4d",stu[count].yy);
printf("\n");
printf("----------------------------------------------------------------\n");

学生管理系统报告(C言语)

学生管理系统报告(C言语)

本科学生课程设计题目学生信息管理系统组长组员学部专业、年级指导教师2011年12 月16 日目录一、程序功能说明.........................二、需求分析.............................模块1:............................ 添加学生信息模块2:............................ 按学号查询学生信息模块3:............................ 按姓名查询学生信息模块4:............................ 修改学生信息模块5:............................ 删除学生信息模块6:............................ 恢复删除信息模块7: ............................ 显示学生信息模块8:............................ 统计优秀、及格、不及格人数模块0:............................ 退出三、算法设计.............................算法1:............................ 添加学生信息算法2:............................ 按学号查询学生信息算法3:.......................... 按姓名查询学生信息算法4:............................ 修改学生信息算法5:............................ 删除学生信息算法6:............................ 恢复删除信息算法7:............................ 显示学生信息算法8:............................ 统计优秀、及格、不及格人数四、调试分析..............................五、程序实现..............................实现1:............................ 添加学生信息函数实现2:............................ 按学号查询学生信息函数实现3:............................ 按姓名查询学生信息函数实现4:............................ 修改学生信息函数实现5:............................ 删除学生信息函数实现6:............................ 恢复删除信息函数实现7:............................ 显示学生信息函数实现8:............................ 统计优秀、及格、不及格人数函数六、总结与体会.............................七、程序附录...............................八、有关程序的问题 ........................一、功能描述做一个简单的文件系统。

C语言学生信息管理系统实验报告 -

C语言学生信息管理系统实验报告 -

C语言课程设计学生信息管理系统目录第一章设计要求………………………………………………第二章算法分析1.理论依据…………………………………………………2.主要实现方法……………………………………………2.1整体流程图………………………………………2.2函数功能和函数之间的调用关系………………第三章代码(源代码)………………………………………第四章分析说明………………………………………………第五章总结……………………………………………………第一章、设计要求1、利用所学的知识、理论和实际结合,利用资源,采用模块化的结构,使用模仿修改自主设计相结合的方法,锻炼学生综合分析解决实际问题的编程能力;2、通过C语言各个函数功能来实现对学生信息的管理,学生信息包括学生姓名,学号,各科成绩;管理方式包括对学生信息的录入,保存,排序,查找、修改、删除等功能。

第二章、算法分析1、程序理论依据通过C语言的程序设计基础的掌握,对学生成绩管理系统进行编写程序。

首先,通过链表这一数据结构来对学生的信息进行录入以及操作,在其过程中,通过各个功能语句以及选择结构,循环结构等方式的结合来达到所要实现的程序功能。

最后通过对C语言中对文件的操作,对已有学生成绩的读取和新建学生成绩的录入保存。

2、主要实现方法2.1整体流程图2.2、函数功能和函数之间的调用关系2.2.1、函数功能:void Menu_1(); //主菜单void Menu_2(); //二级菜单void swap(struct student * phead,struct student * pback); // 链表节点互换void Save(struct student * head); // 写入磁盘void Search(struct student * head); // 查找学生信息void Read(struct student * head); // 显示学生信息void Sort(struct student * head); // 链表节点排序struct student * Create(); // 学生信息手动录入struct student * Readpoint(); // 磁盘文件写入内存struct student * Modify(struct student * head); // 链表结构体成员修改struct student * Add(struct student * head); // 链表节点插入struct student * Delete(struct student * head); // 链表节点删除2.2.2、函数之间的调用关系:通过switch语句进行指令选择:case 1:学生信息录入调用函数Create( )、Save( )、Menu_1( )、Menu_2( )case 2: 学生信息浏览调用函数Readpoint( )、Sort( )、Read( )、Save( )、Menu_1( )、Menu_2( )case 3: 学生信息查找调用函数Search( )、Readpoint( )、Menu_1( )、Menu_2( )case 4: 学生信息修改调用函数Modify( )、Readpoint( )、Save( )、Menu_1( )、Menu_2( )case 5: 学生信息增加调用函数Add( )、Readpoint( )、Save( )、Menu_1( )、Menu_2( )case 6: 学生信息删除调用函数Delete( ) 、Readpoint( )Save( )、Menu_1( )、Menu_2( )case 0: 返回主菜单调用函数Menu_1( )第三章、代码(源代码)/*学生信息管理系统*/#include<stdio.h>#include<stdlib.h>#include<string.h>struct student //定义结构体{int num;char name[24];char sex[5];int Chinese;int Math;int English;struct student * next;};void Menu_1(); //主菜单void Menu_2(); //二级菜单void swap(struct student * phead,struct student * pback); // 链表节点互换void Save(struct student * head); // 写入磁盘void Search(struct student * head); // 查找学生信息void Read(struct student * head); // 显示学生信息void Sort(struct student * head); // 链表节点排序struct student * Readpoint(); // 磁盘文件写入内存struct student * Create(); //学生信息手动录入struct student * Modify(struct student * head); // 链表结构体成员修改struct student * Add(struct student * head); // 链表节点插入struct student * Delete(struct student * head); // 链表节点删除int main(void){Menu_1();return 0;}void Menu_1(){int num;printf("\t\t\t\t 学生信息管理系统\t\t\t\t\n");printf("\t\t\t 1: 进入学生信息管理\n"); //主菜单printf("\t\t\t 0: 退出学生信息管理\n");printf("请您输入指令:");scanf("%d",&num);switch(num){ case 1:Menu_2();default:printf("-----------------------------------------您已退出学生信息管理系统-----------------------------------------------\n");break;}}/*------------------------------------------------------------------------------------------------------------------------------------*/void Menu_2(){struct student * head;int num;printf("\t\t\t 欢迎进入\n");printf("-----------------------------------------------------------------------------------------------------------------------\n");printf("\t\t\t 1: 学生信息录入\n");printf("\t\t\t 2: 学生信息浏览\n");printf("\t\t\t 3: 学生信息查找\n");printf("\t\t\t 4: 学生信息修改\n");//二级菜单printf("\t\t\t 5: 学生信息增加\n");printf("\t\t\t 6: 学生信息删除\n");printf("\t\t\t 0: 返回主菜单\n");printf("------------------------------------------------------------------------------------------------------------------------\n");printf("请您输入指令:");scanf("%d",&num);{case 1:{head = Create();Save(head);printf("\n");printf("\t\t\t 1: 返回主菜单\n");//手动录入学生数据printf("\t\t\t 2: 返回二级菜单\n");printf("\n");printf("请您输入指令:");scanf("%d",&num);switch(num){case 1:Menu_1();break;case 2:Menu_2();break;default :{printf("输入无效,返回二级菜单!\n");Menu_2();}break;}}case 2:{head = Readpoint();//写入链表,返回头指针Sort(head);printf("\t\t\t 以学号升序排列\n");Read(head);// 链表数据写入文件Save(head);printf("\n");printf("\t\t\t 1: 返回主菜单\n");printf("\t\t\t 2: 返回二级菜单\n");printf("\n");printf("请您输入指令:");scanf("%d",&num);switch(num){case 1:Menu_1();break;case 2:Menu_2();break;default :{printf("输入无效,返回二级菜单!\n");Menu_2();}break;}}break;case 3:{head = Readpoint();Search(head); //查找学生信息printf("\n");printf("\t\t\t 1:返回主菜单\n");printf("\t\t\t 2:返回二级菜单\n");printf("\n");printf("请您输入指令:");scanf("%d",&num);switch(num){case 1:Menu_1();break;case 2:Menu_2();break;default :{printf("输入无效,返回二级菜单!\n");Menu_2();}break;}break;case 4:{head = Readpoint();Modify(head); //修改结构体成员并保存到文件Save(head);printf("\n");printf("\t\t\t 1: 返回主菜单\n");printf("\t\t\t 2: 返回二级菜单\n");printf("\n");printf("请您输入指令:");scanf("%d",&num);switch(num){case 1:Menu_1();break;case 2:Menu_2();break;default :{printf("输入无效,返回二级菜单!\n");Menu_2();}break;}}case 5:{head = Readpoint();Add(head); //增加学生信息并保存到文件Save(head);printf("\n");printf("\t\t\t 1:返回主菜单\n");printf("\t\t\t 2:返回二级菜单\n");printf("\n");printf("请您输入指令:");scanf("%d",&num);switch(num){case 1:Menu_1();break;case 2:Menu_2();break;default :{printf("输入无效,返回二级菜单!\n");Menu_2();}break;}}break;head = Readpoint();head = Delete(head);//删除学生信息并保存到文件Save(head);printf("\n");printf("\t\t\t 1:返回主菜单\n");printf("\t\t\t 2:返回二级菜单\n");printf("\n");printf("请您输入指令:");scanf("%d",&num);switch(num){case 1:Menu_1();break;case 2:Menu_2();break;default :{printf("输入无效,返回二级菜单!\n");Menu_2();}break;}}break;case 0: Menu_1();default :{printf("请重新输入\n");Menu_2();}break;}}/*---------------------------------------------------------------------------------------------------------------------------------------*/struct student * Create()//学生信息手动录入{struct student *head,* p,* q;int n;p = q = (struct student *)malloc(sizeof(struct student));printf("请输入学生的姓名、学号、性别、语文成绩、高等数学成绩、英语成绩:\n");scanf("%s",q->name);scanf("%d %s %d %d %d",&q->num,&q->sex,&q->Chinese,&q->Math,&q->English);n = 0;head =NULL;while (q->num != 0){n = n+1;if (n == 1)head = q;elsep->next = q;p = q;q = (struct student *)malloc(sizeof(struct student));scanf("%s",q->name);scanf("%d %s %d %d %d",&q->num,q->sex,&q->Chinese,&q->Math,&q->English);}p->next = NULL;printf("学生信息录入成功!\n");return head;}/*----------------------------------------------------------------------------------------------------------------------------------------*/struct student * Readpoint()//学生信息写入内存,便于操作{FILE * fp1;struct student *head,* p,* q;int n;if((fp1 = fopen("E:test.txt","rb")) == NULL){printf("open file error!\n");exit(0);}p = q = (struct student *)malloc(sizeof(struct student));fscanf(fp1,"%s %d %s %d %d %d",q->name,&q->num,q->sex,&q->Chinese,&q->Math,&q-> English);n = 0;head =NULL;while( !feof(fp1)){n = n+1;if (n == 1)head = q;elsep->next = q;p = q;q = (struct student *)malloc(sizeof(struct student));fscanf(fp1,"%s %d %s %d %d %d",&q->name,&q->num,&q->sex,&q->Chinese,&q->Math,& q->English);}p->next = NULL;fclose(fp1);return head;}/*----------------------------------------------------------------------------------------------------------------------------------------*/void Swap(struct student * phead, struct student * pback)//链表元素数据交换{struct student * temp = (struct student *)malloc(sizeof(struct student));strcpy(temp->name,phead->name);temp->num = phead->num;strcpy(temp->sex,phead->sex);temp->Chinese = phead->Chinese;temp->Math = phead->Math;temp->English = phead->English;strcpy(phead->name,pback->name);phead->num= pback->num;strcpy(phead->sex,pback->sex);phead->Chinese = pback->Chinese;phead->Math = pback->Math;phead->English = pback->English;strcpy(pback->name,temp->name);pback->num = temp->num;strcpy(pback->sex,temp->sex);pback->Chinese = temp->Chinese;pback->Math = temp->Math;pback->English = temp->English;free(temp);}/*----------------------------------------------------------------------------------------------------------------------------------------*/void Sort(struct student * head) // 学号排序{struct student * phead = (struct student *)malloc(sizeof(struct student));struct student * pback = (struct student *)malloc(sizeof(struct student));phead = head;while (phead){int Num = phead->num;pback = phead->next;while(pback){if( Num > pback->num){Swap(phead,pback);Num = phead->num;}pback = pback->next;}phead = phead->next;}}/*---------------------------------------------------------------------------------------------------------------------------------------*/void Read(struct student * head) //学生信息读取{struct student * p;p = head;printf("------------------------------------------------------------------------------------------------------------------------\n");printf("学生的姓名、学号、性别、语文成绩、高等数学成绩、英语成绩:\n");while(p != NULL){printf(" %s \t%d\t%s \t %d \t %d\t\t %d\n",p->name,p->num,p->sex,p->Chinese,p->Math,p->English);p = p->next;}printf("------------------------------------------------------------------------------------------------------------------------\n");}/*----------------------------------------------------------------------------------------------------------------------------------------*/void Save(struct student * head) //学生信息保存到文件{struct student * p;FILE * fp;if((fp = fopen("E:test.txt","wb")) == NULL){printf("open file error!\n");exit(0);}p = head;while(p !=NULL){fprintf(fp,"%s %d %s %d %d %d",p->name,p->num,p->sex,p->Chinese,p->Math,p->Englis h);fprintf(fp,"%s","\r\n");p = p->next;}fclose(fp);}/*----------------------------------------------------------------------------------------------------------------------------------------*/void Search(struct student * head) //学生信息查找{int n;struct student * p;char name[24];int num;char sex[5];int Chinese;int Math;int English;printf("您想以何种方式进行查找:\n");printf("1;姓名\n");printf("2:学号\n");printf("3:性别\n");printf("4:语文成绩\n");printf("5:数学成绩\n");printf("6:英语成绩\n");printf("0:返回二级菜单\n");scanf("%d",&n);switch(n){case 1:{printf("请输入姓名:"); //按姓名查找scanf("%s",name);p = head;while(strcmp(name,p->name)!=0 && p->next != NULL)p = p->next;if(strcmp(name,p->name)==0)printf("%s %d %s %d %d %d\n",p->name,p->num,p->sex,p->Chinese,p->Math, p->English);elseprintf("查无此人!\n");}break;case 2:{printf("请输入学号:"); //按学号查找scanf("%d",&num);p = head;while(num != p->num && p->next != NULL)p = p->next;if(num == p->num)printf("%s %d %s %d %d %d\n",p->name,p->num,p->sex,p->Chinese,p->Math, p->English);elseprintf("查无此人!\n");}break;case 3:{printf("请输入性别:"); //按性别查找scanf("%s",sex);p = head;while(p!= NULL){if(strcmp(sex,p->sex)==0)printf("%s %d %s %d %d %d\n",p->name,p->num,p->sex,p->Chinese,p->Math, p->English);p = p->next;}}break;case 4:{printf("请输入语文成绩:"); //按语文成绩查找scanf("%d",&Chinese);p = head;while(p!= NULL){if(Chinese == p->Chinese)printf("%s %d %s %d %d %d\n",p->name,p->num,p->sex,p->Chinese,p->Math, p->English);p = p->next;}}break;case 5:{printf("请输入高等数学成绩:"); //按高等数学成绩查找scanf("%d",&Math);p = head;while(p!= NULL){if(Math == p->Math)printf("%s %d %s %d %d %d\n",p->name,p->num,p->sex,p->Chinese,p->Math, p->English);p = p->next;}}break;case 6:{printf("请输入英语成绩:"); //按英语成绩查找scanf("%d",&English);p = head;while(p!= NULL){if(English == p->English)printf("%s %d %s %d %d %d\n",p->name,p->num,p->sex,p->Chinese,p->Math, p->English);p = p->next;}}break;default:{printf("指令错误返回二级菜单!\n");Menu_2();}break;}}/*----------------------------------------------------------------------------------------------------------------------------------------*/struct student * Modify(struct student * head){ int n;struct student * p;char name[24];int num;printf(" 您想以何种方式进行修改:\n");printf("1;姓名\n");printf("2:学号\n");printf("0:返回二级菜单\n");scanf("%d",&n);switch(n){case 1:{printf("请输入姓名:"); //按姓名查找后修改信息scanf("%s",name);p = head;while(strcmp(name,p->name)!=0 && p->next != NULL)p = p->next;if(strcmp(name,p->name)==0){scanf("%s %d %s %d %d %d",p->name,&p->num,p->sex,&p->Chinese,&p->M ath,&p->English);printf("修改后:\n");printf("%s %d %s %d %d %d\n",p->name,p->num,p->sex,p->Chinese,p->Math, p->English);}elseprintf("查无此人!\n");}break;case 2:{printf("请输入学号:"); //按学号查找后修改信息scanf("%d",&num);p = head;while(num != p->num && p->next != NULL)p = p->next;if(num == p->num){scanf("%s %d %s %d %d %d",p->name,&p->num,p->sex,&p->Chinese,&p->M ath,&p->English);printf("修改后:\n");printf("%s %d %s %d %d %d\n",p->name,p->num,p->sex,p->Chinese,p->Math, p->English);}elseprintf("查无此人!\n");}break;default:{printf("指令错误,返回二级菜单!\n");Menu_2();}break;}return head;}struct student * Add(struct student * head) //增加学生信息{struct student * p,* q;//为增加的学生分配内存struct student * add = (struct student *)malloc(sizeof(struct student ));scanf("%s %d %s %d %d %d",add->name,&add->num,add->sex,&add->Chinese,&add->Ma th,&add->English);q = head;if(head == NULL){head = add; //空表插入add->next = NULL;}else{ while((add->num > q->num) && (q->next != NULL)) //指向下个节点{p = q;q = q->next;}if(add->num <= q->num) //插到首节点{if (head == q)head =add;elsep->next = add; //插到中间节点add->next = q;}else{q->next = add; //插到尾节点add->next = NULL;}}return head;}struct student * Delete(struct student * head) //删除学生信息{ int n;struct student * p,* q;char name[24];int num;printf(" 您想以何种方式进行删除:\n");printf("1;姓名\n");printf("2:学号\n");printf("0:返回二级菜单\n");scanf("%d",&n);switch(n){case 1:{printf("请输入姓名:"); //按姓名查找并删除scanf("%s",name);p = head;while(strcmp(name,p->name)!=0 && p->next != NULL){q = p;p = p->next;}if ( p == head) //删除首节点{ head = p->next;p->next = NULL;}elseif(strcmp(name,p->name)==0){q->next = p->next; //删除中间节点p->next = NULL;}elseprintf("查无此人!\n");}break;case 2:{printf("请输入学号:"); //按学号查找并删除scanf("%d",&num);p = head;while(num != p->num && p->next != NULL){q = p;p = p->next;}if(p == head){head = p->next;p->next = NULL;}elseif(num == p->num){q->next = p->next;p->next = NULL;}elseprintf("查无此人!\n");}break;default:{printf("指令错误,返回二级菜单!\n");Menu_2();}break;}return head;}程运行结果:第四章、分析说明学生管理系统主要利用链表这一数据结构,通过文件的写入(fprintf 函数)、写出(fscanf函数) 来对数据进行读取进而进行操作以及储存学生信息,以及利用switch语句的特点完成用户与机器间的交互操作,符合实际需要。

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

江西科技师范大学实验报告课程高级语言程序课程设计系别数学与计算机科学学院班级计算机科学与技术1班学号20102006姓名报告规格一、实验目的二、实验原理三、实验仪器四、实验方法及步骤五、实验记录及数据处理六、误差分析及问题讨论目录1. 实训一学成绩管理系统2.3.4.5.6.7.8.9.10.11.12.13.14.15.每次实验课必须带上此本子,以便教师检查预习情况和记录实验原始数据。

实验时必须遵守实验规则。

用正确的理论指导实践员必须人人亲自动手实验,但反对盲目乱动,更不能无故损坏仪器设备。

这是一份重要的不可多得的自我学习资料员它将记录着你在大学生涯中的学习和学习成果。

请你保留下来,若干年后再翻阅仍将感到十分新鲜,记忆犹新。

它将推动你在人生奋斗的道路上永往直前!实训一学生成绩管理系统一、实训目的和要求利用单链表结构实现学生成绩管理,了解数据库管理的基本功能,掌握C语言中的结构体、指针、函数、文件操作等知识,是一个C语言知识的综合应用。

注意其中的难点,指针变量作函数参数、函数值为指向结构体的指针及单链表机构的应用等知识。

二、主要仪器设备安装了Windows操作系统、Turbo C 或Visual C++的计算机。

三、实训内容和原理设计一个学生成绩管理系统,该系统使用单链表结构管理学生成绩,具有输入记录、查询记录、更新记录、统计记录及输出记录等功能。

四、实训小结1、功能描述如图所示,此成绩管理系统主要利用单链表实现,它由如下五大功能模块组成。

(1)输入记录模块。

输入记录模块主要完成将数据存入单链表中的工作。

在此成绩管理系统中,记录可以从以二进制形式存储的数据文件中读入,也可从键盘逐个输入学生记录。

学生记录由学生的基本信息和成绩信息字段构成。

当从数据文件中读入记录时,它就是在以记录为单位存储的数据文件中,将记录逐条复制到单链表中。

(2)查询记录模块。

查询记录模块主要完成在单链表中查找满足相关条件的学生记录。

在此成绩管理系统中,用户可以按照学生的学号或姓名在单链表中进行查找。

若找到该学生的记录,则返回指向该学生记录的指针。

否则,返回一个值为 NULL 的空指针,并打印出未找到该学生记录的提示信息。

(3)更新记录模块。

更新记录模块主要完成对学生记录的维护。

在此成绩管理系统中,它实现了对学生记录的修改、删除、插入和排序操作。

一般而言,系统进行了这些操作之后,需要将修改的数据存入源数据文件。

(4)统计记录模块。

统计记录模块主要完成对各门功课最高分和不及格人数的统计。

(5)输出记录模块。

输出记录模块主要完成两个任务。

第一,它实现对学生记录的存盘操作,即将单链表中的各节点中存储的学生记录信息写入数据文件中。

第二,它实现将单链表中存储的学生记录信息以表格的形式在屏幕上打印出来。

2、总体设计(1)功能模块设计1.主控main()函数执行流程图2.表格形式显示记录(Disp函数) 显示单链表l中存储的学生记录,内容为student结构中定义的内容3. .记录查找定位 (Locate函数):用于定位链表中符合要求的节点,并返回指向该节点的指针。

参数:findmess[]保存要查找的具体内容; nameornum[]保存按什么查找;在单链表l中查找。

4.格式化输入数据Stringinput()函数。

输入字符串,并进行长度验证(长度<lens)。

Numberinput()函数:输入分数,0<=分数<=100)。

5.增加学生记录(Add函数)。

6.查询学生记录(Qur函数),按学号或姓名,查询学生记录。

7.删除学生记录(.Del函数),先找到保存该学生记录的节点,然后删除该节点。

8.修改学生记录(Modify()函数),先按输入的学号查询到该记录,然后提示用户修改学号之外的值,学号不能修改。

9.插入学生记录(Insert函数),插入记录:按学号查询到要插入的节点的位置,然后在该学号之后插入一个新节点。

10.统计学生记录(Tongji函数),统计该班的总分第一名和单科第一,和各科不及格数。

图10统计记录执行流程11.排序学生记录(sort函数),利用插入排序法实现单链表的按总分字段的降序排序,从高到低。

图11排序记录执行流程12.存储学生记录(save函数),数据存盘,若用户没有专门进行此操作且对数据有修改,在退出系统时,会提示用户存盘。

13. main()函数。

主要实现了对整个程序的运行控制,以及相关功能模块的调用。

(2)数据结构设计1. 学生成绩信息结构体typedef struct student /*标记为student*/{char num[10]; /*学号*/char name[15]; /*姓名*/ int cgrade; /*C 语言成绩*/ int mgrade; /*数学成绩*/ int egrade; /*英语成绩*/ int total; /*总分*/ float ave; /*平均分*/ int mingci; /*名次*/ };结构体student 将用于存储学生的基本信息,它将作为单链表的数据域。

为了简化程序,我们只取了三门成绩,其各自段的含义如下。

num[10]:保存学号。

name[15]:保存姓名。

cgrade :保存C 语言成绩。

mgrade :保存数学成绩。

Egrade :保存英语成绩。

Total :保存总分。

Ave :保存平均分。

Mingci :保存名次。

2.单链表node 结钩体 typedef struct node {struct student data; /*数据域*/ struct node *next; /*指针域*/}Node,*Link; /*Node 为node 类型的结构变量,*Link 为node 类型的指针变量*/ 这样定义了一个单链表反而结构体,结构体标记为node,date 为student 结构类型的数据,作为单链表结构中的数据域,next 为单链表中的指针域,用来存储其直接后继节点的图13 main()函数执行流程地址。

Node为node类型的结构体变量,*Link为node类型的指针变量。

(3)函数功能描述1)printheader()函数原型:void printheader()Printheader()函数用于在以表格形式显示学生记录时,打印输出表头信息。

2) printdate()函数原型:void printdate(Node*pp)Printdate()函数用于在表格形式显示学生记录时,打印输出单链表pp中的学生信息。

3) stringinput()函数原型:void stringinput(char*t,int lens,char*notice)Stringinput()函数用于输入字符串,并进行字符串长度验证(长度<lens)。

T用于保存输入的字符串,因为是以指针形式传递的,所以t相当于该函数的返回值。

Notice用于保存printf()中输出的提示信息。

4) numberinput()函数原型:int numberinput(char*notice)Numberinput()函数用于输入数值型数据,notice 用于保存printf()中输出的提示信息,该函数返回用户输入的整型数据。

5) disp()函数原型:void Disp(Link l)Disp()函数用于显示单链表l中储存的学生记录,内容为student结构中定义的内容。

6) locate()函数原型:Node*locate(Link l.char findmess[],char nameornum[])Locate()函数用于定位链表中符合要求的节点,并返回指向该节点的指针。

参数findmess[]保存要查找的具体内容,nameornum[]保存按什么字段在单链表l中查找。

7) Add()函数原型:void Add(Link l)Add()函数用于在单链表l中增加学生记录的节点。

8) Qur()函数原型:Void Qur(Link l)Qur()函数用于在单链表l中按学号或姓名查找满足条件的学生记录,并且显示出来。

9) Del()函数原型:void Del(Link l)Del()函数用于先在单链表l中找到满足条件的学生记录的节点,然后删除该节点。

10) Modify()函数原型:Void Modify(Link l)Modify()函数用于在单链l表中修改学生记录。

11) Insert()函数原型:Void Insert(Link l)Insert()函数用于在单链表l中插入学生记录。

12) Tongji()函数原型:Void Tongji(Link l)Tongji()函数用于在单链表中完成学生记录的统计工作,统计改班的总分第一名,但可第一名和各科不及格人数。

13) Sort()函数原型:void Sort(Link l)Sort()函数用于在单链表l中完成利用插入排序算法实现单链表的按总分字段的降序排序。

14) Save()函数原型:void Save(Link l)Save()函数用于将单链表l中的数据写入磁盘中的数据文件。

15)主函数main()整个成绩管理系统控制部分。

3、程序实现(1)源码分析#include "stdio.h" /*标准输入输出函数库*/#include "stdlib.h" /*标准函数库*/#include "string.h" /*字符串函数库*/#include "conio.h" /*屏幕操作函数库*/#define HEADER1 " ----------------------------STUDENT---------------------------------- \n"#define HEADER2 " | number | name |Eng|Math|Comp| sum | ave |mici | \n"#define HEADER3 " |---------------|---------------|----|----|----|--------|-------|-----| "#define FORMAT " | %-10s |%-15s|%4d|%4d|%4d| %4d | %.2f |%4d |\n"#define DATA p->data.num,p->,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.total,p->data.ave,p->data.mingci #define END " --------------------------------------------------------------------- \n"int saveflag=0; /*是否需要存盘的标志变量*//*定义与学生有关的数据结构*/typedef struct student /*标记为student*/{char num[10]; /*学号*/char name[15]; /*姓名*/int cgrade; /*C语言成绩*/int mgrade; /*数学成绩*/int egrade; /*英语成绩*/int total; /*总分*/float ave; /*平均分*/int mingci; /*名次*/};/*定义每条记录或结点的数据结构,标记为:node*/typedef struct node{struct student data; /*数据域*/struct node *next; /*指针域*/}Node,*Link; /*Node为node类型的结构变量,*Link为node类型的指针变量*/void menu() /*主菜单*/{system("cls"); /*调用DOS命令,清屏.与clrscr()功能相同*/textcolor(10); /*在文本模式中选择新的字符颜色*/gotoxy(10,5); /*在文本窗口中设置光标*/cprintf(" The Students' Grade Management System \n"); gotoxy(10,8);cprintf("*************************Menu********************************\n");gotoxy(10,9);cprintf(" * 1 input record 2 delete record *\n");gotoxy(10,10);cprintf(" * 3 search record 4 modify record *\n");gotoxy(10,11);cprintf(" * 5 insert record 6 count record *\n");gotoxy(10,12);cprintf(" * 7 sort reord 8 save record *\n");gotoxy(10,13);cprintf(" * 9 display record 0 quit system *\n");gotoxy(10,14);cprintf("*************************************************************\n");/*cprintf()送格式化输出至文本窗口屏幕中*/}void printheader() /*格式化输出表头*/{printf(HEADER1);printf(HEADER2);printf(HEADER3);}void printdata(Node *pp) /*格式化输出表中数据*/{Node* p;p=pp;printf(FORMAT,DATA);}void Wrong() /*输出按键错误信息*/{printf("\n\n\n\n\n***********Error:input has wrong! press any key to continue**********\n");getchar();}void Nofind() /*输出未查找此学生的信息*/{printf("\n=====>Not find this student!\n");}void Disp(Link l) /*显示单链表l中存储的学生记录,内容为student结构中定义的内容*/{Node *p;p=l->next; /*l存储的是单链表中头结点的指针,该头结点没有存储学生信息,指针域指向的后继结点才有学生信息*/if(!p) /*p==NULL,NUll在stdlib中定义为0*/{printf("\n=====>Not student record!\n");getchar();return;}printf("\n\n");printheader(); /*输出表格头部*/while(p) /*逐条输出链表中存储的学生信息*/{printdata(p);p=p->next; /*移动直下一个结点*/printf(HEADER3);}getchar();}/*************************************************************作用:用于定位链表中符合要求的节点,并返回指向该节点的指针参数:findmess[]保存要查找的具体内容; nameornum[]保存按什么查找;在单链表l中查找;**************************************************************/ Node* Locate(Link l,char findmess[],char nameornum[]){Node *r;if(strcmp(nameornum,"num")==0) /*按学号查询*/{r=l->next;while(r){if(strcmp(r->data.num,findmess)==0) /*若找到findmess值的学号*/return r;r=r->next;}}else if(strcmp(nameornum,"name")==0) /*按姓名查询*/{r=l->next;while(r){if(strcmp(r->,findmess)==0) /*若找到findmess值的学生姓名*/return r;r=r->next;}}return 0; /*若未找到,返回一个空指针*/}/*输入字符串,并进行长度验证(长度<lens)*/void stringinput(char *t,int lens,char *notice){char n[255];do{printf(notice); /*显示提示信息*/scanf("%s",n); /*输入字符串*/if(strlen(n)>lens)printf("\n exceed the required length! \n"); /*进行长度校验,超过lens值重新输入*/}while(strlen(n)>lens);strcpy(t,n); /*将输入的字符串拷贝到字符串t中*/}/*输入分数,0<=分数<=100)*/int numberinput(char *notice){int t=0;do{printf(notice); /*显示提示信息*/scanf("%d",&t); /*输入分数*/if(t>100 || t<0) printf("\n score must in [0,100]! \n"); /*进行分数校验*/}while(t>100 || t<0);return t;}/*增加学生记录*/void Add(Link l){Node *p,*r,*s; /*实现添加操作的临时的结构体指针变量*/char ch,flag=0,num[10];r=l;s=l->next;system("cls");Disp(l); /*先打印出已有的学生信息*/while(r->next!=NULL)r=r->next; /*将指针移至于链表最末尾,准备添加记录*/while(1) /*一次可输入多条记录,直至输入学号为0的记录结点添加操作*/ {while(1) /*输入学号,保证该学号没有被使用,若输入学号为0,则退出添加记录操作*/{stringinput(num,10,"input number(press '0'return menu):"); /*格式化输入学号并检验*/flag=0;if(strcmp(num,"0")==0) /*输入为0,则退出添加操作,返回主界面*/{return;}s=l->next;while(s) /*查询该学号是否已经存在,若存在则要求重新输入一个未被占用的学号*/{if(strcmp(s->data.num,num)==0){flag=1;break;}s=s->next;}if(flag==1) /*提示用户是否重新输入*/{ getchar();printf("=====>The number %s is not existing,tryagain?(y/n):",num);scanf("%c",&ch);if(ch=='y'||ch=='Y')continue;elsereturn;}else{break;}}p=(Node *)malloc(sizeof(Node)); /*申请内存空间*/if(!p){printf("\n allocate memory failure "); /*如没有申请到,打印提示信息*/return ; /*返回主界面*/}strcpy(p->data.num,num); /*将字符串num拷贝到p->data.num中*/stringinput(p->,15,"Name:");p->data.cgrade=numberinput("C language Score[0-100]:"); /*输入并检验分数,分数必须在0-100之间*/p->data.mgrade=numberinput("Math Score[0-100]:"); /*输入并检验分数,分数必须在0-100之间*/p->data.egrade=numberinput("English Score[0-100]:"); /*输入并检验分数,分数必须在0-100之间*/p->data.total=p->data.egrade+p->data.cgrade+p->data.mgrade; /*计算总分*/p->data.ave=(float)(p->data.total/3); /*计算平均分*/p->data.mingci=0;p->next=NULL; /*表明这是链表的尾部结点*/r->next=p; /*将新建的结点加入链表尾部中*/r=p;saveflag=1;}return ;}void Qur(Link l) /*按学号或姓名,查询学生记录*/{int select; /*1:按学号查,2:按姓名查,其他:返回主界面(菜单)*/ char searchinput[20]; /*保存用户输入的查询内容*/Node *p;if(!l->next) /*若链表为空*/{system("cls");printf("\n=====>No student record!\n");getchar();return;}system("cls");printf("\n =====>1 Search by number =====>2 Search by name\n"); printf(" please choice[1,2]:");scanf("%d",&select);if(select==1) /*按学号查询*/{stringinput(searchinput,10,"input the existing student number:"); p=Locate(l,searchinput,"num");/*在l中查找学号为searchinput值的节点,并返回节点的指针*/if(p) /*若p!=NULL*/{printheader();printdata(p);printf(END);printf("press any key to return");getchar();}elseNofind();getchar();}else if(select==2) /*按姓名查询*/{stringinput(searchinput,15,"input the existing student name:"); p=Locate(l,searchinput,"name");if(p){printheader();printdata(p);printf(END);printf("press any key to return");getchar();}elseNofind();getchar();}elseWrong();getchar();}/*删除学生记录:先找到保存该学生记录的节点,然后删除该节点*/void Del(Link l){int sel;Node *p,*r;char findmess[20];if(!l->next){ system("cls");printf("\n=====>No student record!\n");getchar();return;}system("cls");Disp(l);printf("\n =====>1 Delete by number =====>2 Delete by name\n");printf(" please choice[1,2]:");scanf("%d",&sel);if(sel==1){stringinput(findmess,10,"input the existing student number:"); p=Locate(l,findmess,"num");if(p) /*p!=NULL*/{r=l;while(r->next!=p)r=r->next;r->next=p->next;/*将p所指节点从链表中去除*/free(p); /*释放内存空间*/printf("\n=====>delete success!\n");getchar();saveflag=1;}elseNofind();getchar();}else if(sel==2) /*先按姓名查询到该记录所在的节点*/{stringinput(findmess,15,"input the existing student name");p=Locate(l,findmess,"name");if(p){r=l;while(r->next!=p)r=r->next;r->next=p->next;free(p);printf("\n=====>delete success!\n");getchar();saveflag=1;}elseNofind();getchar();}elseWrong();getchar();}/*修改学生记录。

相关文档
最新文档