学生信息管理系统实训报告(C语言版)
- 格式:doc
- 大小:709.50 KB
- 文档页数:49
c语言实习报告3篇c语言实习报告1在这个星期里,我们专业的学生在专业老师的带领下进行了c语言程序实践学习。
在这之前,我们已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,更多的在运用起来的时候还是感到很棘手,毕竟,万事开头难嘛。
由于时间的关系,我们的这次实践课程老师并没有给我们详细的介绍,只是给我们简单的介绍了几个比较重要的实际操作。
包括了程序模块处理.简单界面程序.高级界面程序.程序的添加修改.用程序做一元线性回归处理以及用c语言程序来画粒度分布图等这几样比较重要的时间操作。
上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正掌握它。
对于程序设计语言的.学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。
学习c程序设计语言除了课堂讲授以外,必须保证有不少于课堂讲授学时的上机时间。
因为学时所限,课程不能安排过多的上机实验,所以希望学生有效地利用课程上机实验的机会,尽快掌握用c语言开发程序的能力,为今后的继续学习打下一个良好的基础。
为此,我们结合课堂讲授的内容和进度,安排了12次上机实验。
课程上机实验的目的,不仅仅是验证教材和讲课的内容、检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面:1.加深对课堂讲授内容的理解课堂上要讲授许多关于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语言的基本语法和数据结构,同时也可以提高你的编程技能和解决问题的能力。
在这个项目中,你需要设计和实现一个系统,该系统可以存储、检索、更新和删除学生信息。
以下是你在完成这个项目后可以获得的一些经验:
1. 数据结构和算法:你将需要使用各种数据结构(如数组、链表、树等)和算法来存储和操作学生信息。
通过这个项目,你将更好地理解这些数据结构和算法的工作原理,以及如何在实际应用中使用它们。
2. 文件I/O:你将需要从文件中读取学生信息,并将更新后的信息写回文件。
这将使你更好地理解文件I/O的原理,以及如何使用C语言的标准库函数进行文件操作。
3. 用户界面设计:你可能需要设计一个简单的用户界面,以便用户可以输入、检索和更新学生信息。
这将使你更好地理解如何使用C语言进行图形用户界面(GUI)编程。
4. 错误处理:在实际应用中,系统可能会出现各种错误,如文件读取错误、内存分配失败等。
通过这个项目,你将更好地理解如何使用C语言的异常处理机制(如setjmp和longjmp函数)来处理这些错误。
5. 代码优化和调试:当你编写代码时,可能会出现各种错误和问题。
通过调试和优化代码,你将更好地理解如何找到和解决问题,从而提高你的编程技能。
总之,完成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语言课程信息管理系统实训总结一、项目背景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语言学生信息管理系统是一个用于管理学生个人信息的程序。
通过该系统,用户可以添加、删除、修改和查询学生的姓名、年龄、性别和学号等信息。
本文将对该系统的设计和实现进行总结。
设计思路功能设计学生信息管理系统应具备以下基本功能: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.释放节点的内存空间,更新链表的指针。
学生学籍管理系统一、实验要求:一个班级有若干名学生(不超过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语言的基本语法、数据类型、程序控制结构以及文件操作等知识点。
同时,通过实际操作,提高学生的编程能力和问题解决能力。
二、实验内容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语言常用的数据结构和文件操作,并能够实际应用在实际的学生管理中。
##二、实验内容本实验要求设计一个学生管理系统,能够完成以下功能: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语言编程,在Visual Studio2017环境下,实现了一种自定义的
学生信息管理系统。
该系统实现学生信息的查询、删除、添加及修改功能。
在项目的开发
过程中,我也使用了文件读取与保存、数据结构训练、数据处理等编程技术。
其中,采用
C语言处理文本文件,用链表结构组织数据,并实现增删改查等功能;使用链表结构处理学生信息,实现数据的添加、修改和删除等操作;使用文件读取及保存,在开发过程中
记录及复用学生信息,并按要求输出学生信息报表;使用数据结构进行数据处理,通过
数据的排序、查找等操作,实现提高学生管理的效率。
实训过程运用C语言基础知识和结构化编程思想,巩固了编写程序的知识和编程技术,让我更加深入地理解面向对象思想。
在实训过程中,我熟练掌握了if语句、while语句、switch语句等基础编程语句,加深了对编程概念的理解,同时也学会了在实际编程中如何把这些概念运用到编程中,从而熟练掌握C语言的编程技巧。
实训结束时,我认为自己在编程方面有了很大的进步,对C语言的编程也有了更深的
理解,同时自己也掌握了一套独立的编程思维,并能够利用面向对象思想,实现学生信息
管理系统客户端最新需求。
江西科技师范大学实验报告课程高级语言程序课程设计系别数学与计算机科学学院班级计算机科学与技术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();}/*修改学生记录。