基于链表的学生信息管理系统实验报告

合集下载

学生管理系统(链表版)

学生管理系统(链表版)

福建工程学院计算机与信息科学系实验报告代码:#include <stdio.h>#include <stdlib.h>#include <ctype.h>#include<conio.h>#define Null 0struct student{int num;char name[20];float chinese,math,english,ave,sum;struct student *next;};void print (){printf(" |------------------------------------------------|\n");printf(" | 欢迎光临学生成绩管理系统|\n");printf(" |------------------------------------------------|\n");printf(" | 1 ==> 创建学生数据|\n");printf(" | 2 ==> 载入学生数据|\n");printf(" | 3 ==> 添加学生数据|\n");printf(" | 4 ==> 查询学生数据|\n");printf(" | 5 ==> 删除学生数据|\n");printf(" | 6 ==> 统计班级人数|\n");printf(" | 7 ==> 排序|\n");printf(" | 0 ==> 退出学生管理系统|\n");printf(" |------------------------------------------------|\n");}struct student *init (int n){int i;struct student *head,*p,*s;for (i=1;i<=n;i++){if (i==1){printf("请输入第%d个学生信息:\n",i);p=(struct student *)malloc (sizeof(struct student));printf("学号\n");scanf("%d",&p->num);printf("姓名\n");scanf("%s",&p->name);printf("语文\n");scanf("%f",&p->chinese);printf("数学\n");scanf("%f",&p->math);printf("英语\n");scanf("%f",&p->english);p->sum=p->chinese+p->math+p->english;p->ave=p->sum/3;head=p;if (n==1) p->next=Null;}else{printf("请输入第%d个学生信息:\n",i);s=(struct student *)malloc (sizeof(struct student));printf("学号\n");scanf("%d",&s->num);printf("姓名\n");scanf("%s",&s->name);printf("语文\n");scanf("%f",&s->chinese);printf("数学\n");scanf("%f",&s->math);printf("英语\n");scanf("%f",&s->english);s->sum=s->chinese+s->math+s->english;s->ave=s->sum/3;p->next=s;p=s;s->next=Null;}}return head;}void insert (struct student *head){struct student *p,*pi;int xuehao;printf ("请问要在哪个学生后面插入数据(输入学号):");scanf("%d",&xuehao);pi=(struct student *)malloc (sizeof(struct student));p=head;printf("学号\n");scanf("%d",&pi->num);printf("姓名\n");scanf("%s",&pi->name);printf("语文\n");scanf("%f",&pi->chinese);printf("数学\n");scanf("%f",&pi->math);printf("英语\n");scanf("%f",&pi->english);pi->sum=pi->chinese+pi->math+pi->english;pi->ave=pi->sum/3;if (head==Null){head=pi;pi->next=Null;}else{while ((p->num!=xuehao)&&(p->next!=Null)){p=p->next;}if (p->next!=Null){pi->next=p->next;p->next=pi;}else{p->next=pi;pi->next=Null;}}}void search (struct student *head){int no;struct student *p;p=head;int n=0;printf("1 按学号查找\n");printf("2 按分数段查找\n");scanf("%d",&n);switch(n){case 1:printf("请输入要查找同学的学号:");scanf("%d",&no);while(p!=Null){if(p->num==no){printf("------------------学生成绩表-----------------------\n");printf("===================================================\n");printf("%-5s%-8s%-8s%-8s%-8s%-8s%-8s\n","学号","姓名","语文","数学","英语","总分","平均分");printf("===================================================\n"); printf("%-5d%-8s%-8.1f%-8.1f%-8.1f%-8.1f%-8.1f\n",p->num,p->name,p->chinese,p->ma th,p->english,p->sum,p->ave);printf("===================================================\n");break;}p=p->next;}break;case 2:{float a,b;int choose;char c;for(;;){printf("\t|---------------------------------------|\n");printf("\t| 分数段查询|\n");printf("\t|---------------------------------------|\n");printf("\t| 1 ==> 按总分成绩查询|\n");printf("\t| 2 ==> 按语文成绩查询|\n");printf("\t| 3 ==> 按数学成绩查询|\n");printf("\t| 4 ==> 按英语成绩查询|\n");printf("\t| 0 ==> 返回上一级菜单|\n");printf("\t|---------------------------------------|\n");printf("请输入你要执行的操作:");scanf("%d",&choose);while(getchar()!='\n');switch(choose){case 1:{p=head;printf("请输入所要查找的分数段:\n");printf("请输入第一个分数:\n");scanf("%f",&a);printf("请输入第二个分数:\n");scanf("%f",&b);printf("%-5s%-8s%-8s%-8s%-8s%-8s%-8s\n","学号","姓名","语文","数学","英语","总分","平均分");while(p!=Null){if (p->sum>=a&&p->sum<=b){printf("%-5d%-8s%-8.1f%-8.1f%-8.1f%-8.1f%-8.1f\n",p->num,p->name,p->chinese,p->ma th,p->english,p->sum,p->ave);}p=p->next;}}break;case 2:{p=head;printf("请输入所要查找的分数段:\n");printf("请输入第一个分数:\n");scanf("%f",&a);printf("请输入第二个分数:\n");scanf("%f",&b);printf("%-5s%-8s%-8s%-8s%-8s%-8s%-8s\n","学号","姓名","语文","数学","英语","总分","平均分");while(p!=Null){if (p->chinese>=a&&p->chinese<=b){printf("%-5d%-8s%-8.1f%-8.1f%-8.1f%-8.1f%-8.1f\n",p->num,p->name,p->chinese,p->ma th,p->english,p->sum,p->ave);}p=p->next;}}break;case 3:{p=head;printf("请输入所要查找的分数段:\n");printf("请输入第一个分数:\n");scanf("%f",&a);printf("请输入第二个分数:\n");scanf("%f",&b);printf("%-5s%-8s%-8s%-8s%-8s%-8s%-8s\n","学号","姓名","语文","数学","英语","总分","平均分");while(p!=Null){if (p->math>=a&&p->math<=b){printf("%-5d%-8s%-8.1f%-8.1f%-8.1f%-8.1f%-8.1f\n",p->num,p->name,p->chinese,p->ma th,p->english,p->sum,p->ave);}p=p->next;}}break;case 4:{p=head;printf("请输入所要查找的分数段:\n");printf("请输入第一个分数:\n");scanf("%f",&a);printf("请输入第二个分数:\n");scanf("%f",&b);printf("%-5s%-8s%-8s%-8s%-8s%-8s%-8s\n","学号","姓名","语文","数学","英语","总分","平均分");while(p!=Null){if (p->english>=a&&p->english<=b){printf("%-5d%-8s%-8.1f%-8.1f%-8.1f%-8.1f%-8.1f\n",p->num,p->name,p->chinese,p->ma th,p->english,p->sum,p->ave);}p=p->next;}}break;case 0: return ;default: printf("\n\n您的输入有误!请重新输入:\n\n");break;}}}}}struct student *del (struct student *head,int n){struct student *p,*q;p=head;if (head==Null){printf("没有学生的资料要删除!\n");return head;}while (p->num!=n&&p->next!=Null){q=p;p=p->next;}if (p->num==n){if (p==head)head=p->next;elseq->next=p->next;free (p);}elseprintf("找不到相应的学生资料!\n");return head;}void list(struct student *head){int i=0;struct student *p;p=head;printf("------------------学生成绩表-----------------------\n");printf("===================================================\n");printf("%-5s%-8s%-8s%-8s%-8s%-8s%-8s\n","学号","姓名","语文","数学","英语","总分","平均分");printf("===================================================\n");while (p!=Null){printf("%-5d%-8s%-8.1f%-8.1f%-8.1f%-8.1f%-8.1f\n",p->num,p->name,p->chinese,p->ma th,p->english,p->sum,p->ave);p=p->next;}printf("===================================================\n");printf("\n\n");}void tongji (struct student *head){int i=0;struct student *p;float chinese1=0,math1=0,english1=0;p=head;while(p!=Null){i=i+1;chinese1=chinese1+p->chinese;math1=math1+p->math;english1=english1+p->english;p=p->next;}printf("班级总人数为:%d\n",i);printf("班级语文平均分为:%4.1f\n",chinese1/i);printf("班级数学平均分为:%4.1f\n",math1/i);printf("班级英语平均分为:%4.1f\n",english1/i);printf("\n");}student *sort(student *head,int choose){student *p1,*p2=head,*pm,*px;student mid;if (!p2) return head;for(p1=p2;p1->next!=NULL;p1=p1->next){pm=p1;for(p2=p1->next;p2!=NULL;p2=p2->next)switch(choose){case 1:if (pm->num>p2->num) pm=p2;break;case 2:if (pm->sum<p2->sum) pm=p2;break;case 3:if (pm->chinese<p2->chinese) pm=p2;break;case 4:if (pm->math<p2->math) pm=p2;break;case 5:if (pm->english<p2->english) pm=p2;break;}if (pm!=p1){mid=*pm;*pm=*p1;*p1=mid;px=pm->next;pm->next=p1->next;p1->next=px;}}printf("\n排序后的成绩表为:\n");list(head);return head;}student *sort_all(student *head){int choose;for(;;){printf("\t|---------------------------------------|\n");printf("\t| 学生成绩统计排序|\n");printf("\t|---------------------------------------|\n");printf("\t| 1 ==> 按学生学号排序|\n");printf("\t| 2 ==> 按学生总分排序|\n");printf("\t| 3 ==> 按学生语文成绩排序|\n");printf("\t| 4 ==> 按学生数学成绩排序|\n");printf("\t| 5 ==> 按学生英语成绩排序|\n");printf("\t| 0 ==> 返回上一级菜单|\n");printf("\t|---------------------------------------|\n");printf("请输入你要执行的操作:");scanf("%d",&choose);while(getchar()!='\n');switch(choose){case 1:head=sort(head,choose);break;case 2:head=sort(head,choose);break;case 3:head=sort(head,choose);break;case 4:head=sort(head,choose);break;case 5:head=sort(head,choose);break;case 0:return head;default: printf("\n\n您的输入有误!请重新输入:\n\n");break;}}}void save(struct student *head){int i,j;FILE *fp;student *p;p=head;char c; //head 头指针if((fp=fopen("c:\\stu_list","wb"))==NULL){printf("Cannot open file strike any key exit!");getch();exit(0);}while(p){fwrite(p,sizeof(student),1,fp);p=p->next;}fclose(fp);}struct student* read(){int i=0,j;FILE *fp;struct student *p; //工作指针student *last,*head; //最后一项的指针head=(student*)malloc(sizeof(student));last=head;if((fp=fopen("c:\\stu_list","rb"))==NULL){printf("Cannot open file strike any key exit!");getch();exit(0);}while(!feof(fp)){p=(student*)malloc(sizeof(student));if(fread(p,sizeof(student),1,fp)==1){last->next=p;last=last->next;}}fclose(fp);return head=head->next;}int main(){FILE *fp;char ch,c;int n=0;struct student *head,*r;print();while((ch=tolower(getchar()))!='0'){switch(ch){case '1':{printf("请问有多少个学生的资料要输入?\n");scanf("%d",&n);head=init(n);list(head);save(head);break;}case '2':{head=read();list(head);break;}case '3':{insert(head);list (head);save(head);break;}case '4':{search(head);break;}case '5':{int num;printf("请输入要删除学生的学号:\n");scanf("%d",&num);head=del(head,num);list (head);save(head);break;}case '6':{tongji(head);break;}case '7':{head=read();sort_all(head);break;}default:break;}printf("\n\n\t======>按Enter键返回主菜单\n");fflush(stdin);c=getchar();system("cls");print();}}。

C语言程序设计实验实验报告7

C语言程序设计实验实验报告7

C语言程序设计实验实验报告7实验名称:链表实现学生信息管理系统实验目的:通过设计链表实现学生信息管理系统,掌握链表的操作方法及其应用。

实验内容:设计一个学生信息结构体,包括学号、姓名、性别、年龄和成绩五个成员变量,并选择链式结构存储这些数据。

实现以下功能:1. 添加学生信息:从键盘输入学号、姓名、性别、年龄和成绩等信息,添加到链表中。

2. 删除学生信息:从链表中删除指定学号的学生信息。

5. 按成绩排序:按学生的成绩从高到低排序,并输出所有学生的信息。

7. 退出程序:退出学生信息管理系统。

实验方法:1. 设计学生信息结构体,定义链表节点结构体,并编写初始化链表和销毁链表的函数。

2. 编写添加学生信息函数,新建链表节点并插入链表末尾。

3. 编写删除学生信息函数,根据学号查找需要删除的节点,先将该节点从链表中删除,再释放节点空间。

4. 编写修改学生信息函数,根据学号查找需要修改的节点,并修改其成员变量。

6. 编写按成绩排序函数,使用冒泡排序法对链表进行排序,并输出所有学生的信息。

7. 编写输出所有学生信息函数,遍历链表并输出每个节点的信息。

8. 完成学生信息管理系统的主函数,实现菜单及相应功能的选择。

实验结果:依次选择菜单中的各个功能,添加、修改、删除、查找、排序和输出学生信息都能实现。

经测试,程序稳定运行,功能正常,符合需求。

本次实验主要让我们掌握了链式结构的概念、链表节点的定义、链表的初始化、插入、查找、删除和销毁链表的操作方法,以及在实际应用中如何使用链表来实现数据管理。

虽然链表操作相对于数组稍微有些繁琐,但其可以灵活处理数据结构的长度变化,具有更高的可扩展性和更好的操作效率,可以更好的适应各种实际需求。

在实验中,还需要注意节点指针的正确使用、各个函数之间的调用关系和输入输出数据格式的合理选择等问题,以保证程序能够正常运行。

同时,还需要保持认真细致的态度,严格按照实验需求和要求来完成每个步骤,以达到更好的实验效果和运行效率。

超好的学生成绩管理系统实验报告顺序表链表

超好的学生成绩管理系统实验报告顺序表链表

数据结构实验报告一.具体设计Ⅰ顺序表㈠存储结构定义采用了两个结构体,其中Student结构体用于存储学生的各项信息,包括学号int num;姓名char name[20];英语成绩float english;数学成绩float math;数据结构成绩float database;总分float sum;平均分float average; 顺序表的结构体sqlist中包含的数据项是Student结构体,还有存储当前长度的int length;及当前分配的存储容量的int listsize;㈡函数功能定义及具体功能介绍⑴录入信息int Input(sqlist *L)每次输入学生的所有信息,输入完后提示是否继续输入⑵显示所有学生信息int Display(sqlist *L)⑶插入一条记录到表尾void Insert(sqlist *L)⑷删除一条记录int Delete(sqlist *L)包括1.按姓名删除2.按学号删除⑸统计成绩int Statistic(sqlist *L)包括全班平均成绩,各科平均成绩,总分最高分,总分最低分,各科最高分,各科最低分以及各科及格率⑹查找int Search(sqlist *L)查找方法包括1.顺序查找2.二分查找按查找内容又包括1.按学号查找2.按姓名查找,若查找成功则显示查找到的学生信息,若查找失败则提示“查找失败!”⑺排序int Sort(sqlist *L)排序方法包括1.直接插入排序2.折半插入排序3.冒泡排序4.直接选择排序,排序内容包括1.按学号排序2.按英语成绩排序3.按高数成绩排序4.按数据结构成绩排序5.按总分排序(0)退出程序void tuichu(sqlist *L)释放占用的内存空间,显示"谢谢使用!",然后关闭所有文件,终止正在进行的程序(9) 主菜单int menu(),每次进行完一次功能实现后再次弹出,方便用户使用(10) 主函数int main(),用switch语句根据用户的选择进行相应的操作㈢具体设计思路及过程⑴录入信息int Input(sqlist *L),初始length为0,每录入一个学生length加一,然后显示提示信息是否继续,若继续则要再录入,所以要把这个整体的外面再套一层while循环,但是在写的过程中也遇到了一个困难,还没有输入继续y,就让输入学生信息,通过百度,知道了C有一个输入的缓冲区,所以在每次输入前都请空了缓冲区,防止读入缓冲区余下的内容。

C语言程序设计报告-基于链表的学生信息管理系统

C语言程序设计报告-基于链表的学生信息管理系统

《C语言程序设计实训2》报告设计题目:基于链表的学生信息管理系统学院名称:信息科学技术学院专业:网络工程班级:二班姓名:学号:指导教师:提交日期:一、 实验内容:编写并调试程序,实现学校各专业班级学生信息的管理。

要求一个工程下多个文件。

main 函数以单独的文件main.cpp 存放。

在头文件student.h 中定义学生信息的结构体类型,包括:学号、姓名、专业、班级、3门成绩;和符号常量N (学生数)。

(同一班级的学生可以属于不同的专业,同一专业的学生可以属于不同的班级)。

全局类型的定义如下:二、实验要求:(1) main 函数:以菜单形式将各项功能提供给用户,根据用户的选择,调用相应的函数。

(2) 定义函数STU *CreateList (char * filename ):从二进制文件“studentInfo.dat ”中依次读取12个学生的数据(在文件中学生信息按学号由低到高依次存放),建立带头结点(特殊结点,不放学生信息)的、有序的单链表(链表中各学生信息按学号由低到高依次存放), 返回表头指针。

每次从文件中读一个学生的信息,并将该学生信息插入到链表的表尾。

设置头结点的目的:在链表中第一个学生结点之前插入或者是删除第一个学生结点的时候不必做特殊处理)更灵活的方法:从文件中循环读数据时,根据当前学生信息的next成员的值,决定是否进行下次循环,如果next==NULL,则表明读到最后一个学生信息,循环结束。

(3)定义函数void Output (STU *head):以指向链表头结点的指针为参数,将链表中所有学生的信息表格化输出。

定义函数void OutOneNode(STU *p): 输出参数所指的链表中一个结点的信息。

(4)STU *Max(STU *head):查找总成绩最高的学生,返回指向该学生结点的指针。

考虑特殊情况,找到两个及以上相同最高分同学的情况,如何处理?(5)定义函数STU *Search_num(STU * head ,char *num ):查找指定的学生,返回指向该学生结点的指针。

C课程设计报告单链表学生信息管理系统

C课程设计报告单链表学生信息管理系统

.学生信息管理系统设计文档一、设计任务描述为了实现学籍管理的简单化,我们基于Visual C++集成开发环境编写了“学生信息管理系统”软件,该软件适用于所有windows操作系统,面向广大用户,界面简洁,操作简单。

此软件主要是实现对学生学籍信息进行系统化的管理,可以对学生基本信息进行添加、删除、查找、修改以及对学生成绩的管理,主要是根据学生的学号及其姓名进行操作的。

该软件可以更加方便管理者管理学生学籍信息。

二、功能需求说明该系统所需要的功能有:1、链表的建立;2、学生信息的插入;3、学生信息的查询;4、学生信息的输出;5、学生信息的修改;6、学生信息的删除;7、良好的欢迎选择界面。

三、总体方案设计一、实现任务的方法1、在欢迎选择界面中,使用Switch 这一选择结构来连接程序的执行和用户的命令;2、在从学生信息的建立直到删除,都是使用链表的相关知识;3、在定义学生信息时,建立一个Inform 类;在定义学生课程成绩时,自定义优质范文.了一个achieve 结构体;二、总体结构三、模块划分(1)链表的建立。

(2)对链表信息的插入。

(3)对链表信息的查找。

(4)对链表信息的输出。

(5)对链表信息的删除。

(6)对链表信息的修改。

课程成绩信息作为附加信息,穿插于各个模块中。

三、数据结构说明优质范文..一、自定义的数据结构:1、achieve(课程成绩)用于存放课程成绩信息包括课程数、课程名、成绩、学分、总分和平均分。

2、inform(学生基本信息)用于存放学生基本信息,包括姓名、学号、性别等。

3、结点结构-Nodetype,定义了数据域inform和指针域next;二、类Student 用于存放处理学生信息的各个功能函数,private 成员是链表的头指针。

优质范文..四、各模块设计说明一、建立:首先:建立一个空链表:Student::Student(){head=new Nodetype;表明这是一个空链表head->next=NULL;\n; 请建立链表潣瑵?}然后建立链表优质范文..:二、添加:按照学号从小到大的顺序插入:三、输出:将链表的数据输出,由于上述操作,输出时会按照学号从小到大的顺序输出。

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

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

学生信息管理系统一、需求分析C语言课程设计报告-------学生信息管理系统系统菜单的主要功能:1 一条记录的数据的输入2 单条记录内容的显示3 整个链表内容的显示4 添加一条记录5 删除一条记录6 保存整个链表数据到文件中7 读取文件恢复链表8 查找记录该题主要考察了我对结构体,指针,文件的操作,以及C语言算法的掌握,所以完成此道题目要求较强的设计能力,尤其是要有一种大局观的意识。

如何调试程序也很重要。

菜单中的每一个选项都对应一个子程序,子程序的内容包含了很多C语言中学过的技巧,下面就各个子程序中的功能进行说明:功能1以一定间隔输入记录以创建链表,当输入全是0时结束创建。

功能2输入一条记录到结构体中去。

功能3通过输入的学号来判断来是否显示记录。

功能4是显示所有的记录,通过循环输出,格式也比较重要。

功能5通过指针的方法来实现添加功能。

功能6为按学号删除记录,先输入学号,再一一比较,如果没有则返回失败信息,如果找到就将此记录都向前移一位,返回n-1,若输入0则结束该功能。

功能7和8是对文件的操作,提前准备好数据。

功能9为按姓名查找记录,输入姓名,一一比较。

功能0 可以结束菜单的操作。

二、详细分析:函数流程图(另附)三、主要源程序代码:程序正文部分:#include<stdio.h>#include<stdlib.h>#include<alloc.h>#include<ctype.h>#include<string.h>#include<conio.h>#define NULL 0#define LEN sizeof(struct student)struct student{int num;char name[10];char sex[3];char banji[20];char sushe[20];char home[30];char dianhua[15];struct student * next;};int n;int menu(){char c;do{system("cls");printf("\t\t****Student'Grade Management System****\n");printf("\t\t|1.Creat the Structure\n");printf("\t\t|2.Input A Record|\n");printf("\t\t|3.Display a Record|\n");printf("\t\t|4.Display All Records|\n");printf("\t\t|5.Add a Record|\n");printf("\t\t|6.Delete a Record|\n");printf("\t\t|7.Save Data|\n");printf("\t\t|8.Load Data|\n");printf("\t\t|9.Find a Record|\n");printf("\t\t|0.Quit|\n");printf("\t\t***********************************\n");printf("\t\t\tGive your Choice(0-9):");c=getchar();}while(c<'0'||c>'9');return(c-'0');}struct student * creat(void){struct student *head;struct student * p1,* p2;n=0;p1=p2=(struct student *)malloc(LEN);scanf(" %d %s %s %s %s %s %s \n",&p1->num,p1->name,p1->sex,p1->banji,p1->sushe,p1->home,p1->dianhua);head=NULL;while(p1->num!=0){n=n+1;if(n==1)head=p1;else p2->next=p1;p2=p1;p1=(struct student *)malloc(LEN);scanf(" %d %s %s %s %s %s %s \n",&p1->num,p1->name,p1->sex,p1->banji,p1->sushe,p1->home,p1->dianhua);}p2->next=NULL;return(head);}void inputdata(struct student * p){printf("num:");scanf("%d",&p->num);printf("name:");scanf("%s",p->name);printf("sex:");scanf("%s",p->sex);printf("banji:");scanf("%s",p->banji);printf("sushe:");scanf("%s",p->sushe);printf("home:");scanf("%s",p->home);printf("dianhua:");scanf("%s",p->dianhua);printf("\n");n=n+1;}void displayl(struct student * p){int j;printf("the display number:\n");scanf("%d",&j);if(j==p->num){printf("| num | name |sex| banji | sushe | home | dianhua |\n");printf("|----------|-----------|---|------------|----------|--------------|------------|\n");printf("| %d | %s |%s | %s | %s | %s | %s |\n",p->num,p->name,p->sex,p->banji,p->sushe,p->home,p->dianhua);printf("\n");}else{printf("cannot find the record!\n");}}void displayall(struct student * head){struct student * p;printf("\nNow,there %d records are:\n",n);if(head!=NULL)do{printf("| num | name |sex| banji | sushe | home | dianhua |\n");printf("|----------|-----------|---|------------|----------|--------------|------------|\n");printf("| %d | %s |%s | %s | %s | %s | %s |\n", p->num,p->name,p->sex,p->banji,p->sushe,p->home,p->dianhua);printf("\n");p=p->next;}while(p!=NULL);}struct student * addRecord(struct student * head,struct student * p){struct student * p0,* p1,* p2;p1=head;p0=p;if(head==NULL){head=p0;p0->next=NULL;}else{while((p0->num>p1->num)&&(p1->next!=NULL)){p2=p1;p1=p1->next;}if(p0->num<=p1->num){if(head==p1)head=p0;else p2->next=p0;p0->next=p1;}else{p1->next=p0;p0->next=NULL;}}n=n+1;return(head);}struct student * deleteRecord(struct student * head,int num){struct student * p1,* p2;if(head==NULL){printf("\nlist null!\n");}else{p1=head;while(p1->num!=num&&p1->next!=NULL){p2=p1;p1=p1->next;}if(num==p1->num){if(p1==head)head=p1->next;else p2->next=p1->next;printf("delete number is:%d\n",num);}elseprintf("%d not been found!\n",num);}return(head);}void savedata(struct student * head,char filename[]){struct student * p;FILE * fp;p=head;printf("Enter filename,for example c:\\f1\o\te.txt:\n");scanf("%s",filename);if((fp=fopen("filename[]","wb"))==NULL){printf("cannot open file\n");return;}if(p==NULL||fp==NULL)return;do{fwrite(p,sizeof(struct student),1,fp);p=p->next;}while(p!=NULL);fclose(fp);}struct student *loaddata(char filename[]){struct student * p;FILE * fp;printf("Enter filename name,for example c:\\f1\\te.txt:\n");scanf("%s",filename);fp=fopen("filename[]","rb");do{fread(p,sizeof(struct student),1,fp);p=p->next;printf("| num | name |sex| banji | sushe | home | dianhua |\n");printf("|----------|-----------|---|------------|----------|--------------|------------|\n");printf("| %d | %s |%s | %s | %s | %s | %s |\n",p->num,p->name,p->sex,p->banji,p->sushe,p->home,p->dianhua);}while(p!=NULL);fclose(fp);return(p);}struct student * findRecord(struct student * head){struct student*p;char s[10];clrscr();printf("please enter name for find\n");scanf("%s",s);p=head;while(strcmp(p->name,s)&&p!=NULL)p=p->next;if(p==NULL)printf("\nlist no %s student\n",s);else{printf("\n\n****************************havefound*****************************************\n");printf("| num | name |sex| banji | sushe | home | dianhua |\n");printf("|----------|-----------|---|------------|------------|-------------|-----------|\n");printf("|%d |%-10s |%-3c|%-20s |%-20s |%-30s |%-15s |\n",p->num,p->name,p->sex,p->banji,p->sushe,p->home,p->dianhua);printf("***********************************end*********************************** ***********\n");}return(head);}void main(){int delete_num;struct student * head,*p;char filename[20];clrscr();for(;;){switch(menu()){ case 1:printf("\t\t\tCreat the Structure\n");head=creat();break;case 2:printf("\t\t\tInput A Record\n");p=(struct student *)malloc(LEN);inputdata(p);break;case 3:printf("\t\t\tDisplay a Record\n");displayl(p);break;case 4:printf("\t\t\tDisplay All Records\n");displayall(head);break;case 5:printf("\t\t\tAdd a Record\n");p=(struct student *)malloc(LEN);scanf("%d,%s,%s,%s,%s,%s,%s",&p->num,p->name,p->sex,p->banji,p->sushe,p->home,p-> dianhua);while(p->num!=0){head=addRecord(head,p);displayall(head);printf("\t\t\tAdd a Record\n");p=(struct student *)malloc(LEN);scanf("%d,%s,%s,%s,%s,%s,%s",&p->num,p->name,p->sex,p->banji,p->sushe,p->home,p-> dianhua);}break;case 6:printf("\t\t\tDelete a Record\n");scanf("%d",&p->num);while(p->num!=0){head=deleteRecord(head,delete_num);displayall(head);printf("\t\t\tDelete a Record\n");scanf("%d",&p->num);}break;case 7:printf("\t\t\tSave Data\n");savedata(head,filename);break;case 8:printf("\t\t\tLoad Data\n");head=loaddata(filename);break;case 9:printf("\t\t\tFind a Record\n");head=findRecord(head);break;case 0:printf("\t\t\tGood Luck,Bye-bye!\n");exit(0);}}}四、测试说明inputdata(struct student *p)函数输入一条记录display1(struct student *p)函数显示一条记录menu()函数选择菜单displayall(struct student *head)函数显示所有记录deleteRecord(struct student *head, int number);函数按学号查找,删除一条记录struct student *findRecord(struct student * head)函数按姓名查找并显示一条记录addRecord(struct student *head, struct student *p)插入一条记录savedata(struct student *head, char filename[]);函数将所有数据写入文件中struct student *loaddata(char filename[]);函数从文件中读取数据Main函数退出程序1、进入界面2、输入选项1,回车;按提示输入数据:3、回到主菜单;输入选项7,回车;输入文件名:data.txt,回车;出现成功提示,则读入文件操作成功。

链表实现学生信息管理

链表实现学生信息管理

实验2利用单链表实现学生信息管理1.实验目的·掌握单链表结构的实现方式;掌握单链表常用算法的实现;·熟悉利用单链表解决问题的一般思路;了解单链表结构的优点与不足。

2.实验内容与要求以学生信息为数据结点建立带头结点的单链表。

一个结点的信息包括学号、姓名、性别、班级和联系电话。

程序用户可通过数字键选择信息浏览、插入信息、修改信息、删除信息等功能。

对程序的具体要求如下:(1)程序启动后,显示下列选项信息:1—信息浏览2—插入信息3—删除信息4-修改信息0—退出程序(2)输入数字“1”显示所有学生信息列表。

(3)输入数字“2”进入插入信息功能模块。

程序依次提示并由用户输入学号、姓名、性别、班级和联系电话,最终实现在线性表头部插入一个学生信息。

(4)输入数字“3”进入删除信息功能模块。

程序提示并由用户输入学号,最终实现按照学号删除某个学生信息。

(5)输入数字“4”进入修改信息功能模块。

程序提示并由用户输入学号,最终实现按照学号修改某个学生信息。

(6)通过输入数字“0”使得程序结束。

(7)当用户执行浏览、插入、删除功能后,程序应继续提示用户通过数字键选择相应功能,直到用户输入数字“0”程序才结束。

3.实验编程指导(1)可仿照本章单链表的定义形式,建立学生信息结点数据,并建立一个空的单链表。

(2)参考本章中单链表的算法描述和例题中的算法实现,在本程序中增加信息浏览、插入结点、删除结点、修改结点内容的算法实现函数。

(3)编写主函数,可通过在while循环结构中嵌入switch分支结构实现操作选择功能。

(4)完善插入、删除功能。

实现插入信息的录入、删除记录的定位等细节。

并完善用户操作界面,给出详细的操作提示。

5.实验报告要求实验报告要求以word文件形式发到老师邮箱。

内容包括:(1)报告封面包括实验名称、班级、姓名、学号以及实验完成日期。

(2)各程序模块名称及功能说明。

并绘制出主要功能函数的程序流程图。

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

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

.C语言课程设计学生信息管理系统姓名洪伟生院系计算机学院日期2015年7月5日.目录第一章设计要求⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯第二章算法分析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*C reate();//学生信息手动录入struct student*R eadpoint();//磁盘文件写入内存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();break;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);switch(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;}}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;}}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;case 6:{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();break;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->E nglish);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->En glish);}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->Chine se,&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(structstudent));struct student * pback = (struct student *)malloc(sizeof(structstudent));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->English);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->Chines e,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->Chines e,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->Math,&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->Math,&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(structstudent ));scanf("%s %d %s %d %d %d",add->name,&add->num,add->sex,&add->Chin ese,&add->Math,&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;}程运行结果:第四章、分析说明学生管理系统主要利用链表这一数据结构,通过文件的写入(f printf 函数)、写出(fscanf 函数) 来对数据进行读取进而进行操作以及储存学生信息,以及利用switch 语句的特点完成用户与机器间的交互操作,符合实际需要。

数据结构 利用单链表实现学生基本信息管理 课程设计 实验报告

数据结构 利用单链表实现学生基本信息管理 课程设计 实验报告

数据结构课程设计设计题目:利用单链表实现学生基本信息管理目录课题名称利用单链表实现学生基本信息管理院系年级专业学号姓名成绩课题设计目的与设计意义课题设计目的:(1)学会单链表结点的定义(2)掌握单链表的基本运算,熟悉对单链表的一些基本操作和具体函数的定义。

(3)加深对链表的理解,逐步培养解决实际问题的编程能力(4)创建一个初始链表,通过调用定义的基本操作函数来实现单链表上的插入、删除元素等操作。

调试程序并对相应的输出做出分析;修改输入数据,预期输出并验证输出的结果。

加深对有关意义:一般来讲,课程设计教学实验复杂一些,深度更广并且更加接近实用.通过课程设计的综合训练,培养学生实际分析问题,编程和动手能力,使学生对数据结构进行更深一层的了解,培养同学们对学习数据结构这门课程的兴趣, 让同学们学会如何去查找资料和整合处理这些资料的能力, 也为以后的大学毕业设计论文打下了一个初步的基础.这些课程设计都是比较难的,要分成几个小项目, 几个学生一组, 培养团队协作精神. 最终帮助学生系统掌握课程的主要内容, 更好地完成教学任务. 基本掌握面向过程程序设计的基本思路和方法; (2)达到熟练掌握数据结构的基本知识和技能;(3)能够利用所学的基本知识和技能,解决简单的程序设计问题.指导教师:年月日一:课程设计目的和意义...................................................................................................... - 1 -1、课程设计目的:............................................................................................................ - 1 -2、课程设计意义:............................................................................................................ - 1 - 二:需求分析与要求:.......................................................................................................... - 1 -1、程序功能:.................................................................................................................... - 1 -2、基本要求:.................................................................................................................... - 2 -3、功能要求:.................................................................................................................... - 2 -(1)信息录入功能:................................................................................................ - 2 -(2)查询功能:........................................................................................................ - 2 -(3)插入功能:........................................................................................................ - 2 -(4)删除功能:........................................................................................................ - 2 -(5)输出功能:........................................................................................................ - 2 -4、说明:............................................................................................................................ - 2 -5、输入输出的形式:........................................................................................................ - 3 -6、开发环境:.................................................................................................................... - 3 -三、概要设计:.......................................................................................................................... - 3 -四、模块图:.............................................................................................................................. - 5 -五、详细设计:.......................................................................................................................... - 5 -六、运行结果与分析:.......................................................................................................... - 10 -1 、主界面........................................................................................................................ - 10 -2.建立学生信息表............................................................................................................ - 11 -3、查询某学生的所有信息。

链表实验报告总结

链表实验报告总结

链表实验报告总结篇一:顺序表,链表总结实验报告实验报告实验目的:学生管理系统(顺序表)实验要求:1.建表2.求表长3.插入4.查找5.删除6.列表7.退出源程序:#include#include#include#define MaxSize 1000typedef struct{char xh[40];char xm[40];int cj;}DataType; //学生的结构typedef struct {DataType data[MaxSize]; //定义表的数据类型int length; //数据元素分别放置在data[0]到data[length-1]当中} SqList; //表的结构void liebiao(SqList *L)//{int k,n;char q;printf("请输入,输入学生的个数:\n");fflush(stdin);scanf("%d",&n);for(k=0;k {printf("请输入学生学号\n");scanf("%s",L->data[k].xh);printf("请输入学生名字\n");scanf("%s",L->data[k].xm);printf("请输入学生成绩\n");scanf("%d",&L->data[k].cj); 建立表格}L->length=n;}void qb(SqList *L) //全部输出{int k,w;for(k=0;klength;k++){w=k+1;printf("第%d位学生:",w);printf("%s %s%d\n",L->data[k].xh,L->data[k].xm,L->d ata[k].cj);}}int cr(SqList *L,DataType *xs,int i) //插入信息{int j;if(L->length==MaxSize){printf("没有!");return 0;else if((iL->length)){printf("程序溢出,不符合");return 0;}else{for(j=L->length-1;j>=i;j--){strcpy(L->data[j+1].xh,L->data[j].xh); strcpy(L->data[j+1].xm,L->data[j].xm);L->data[j+1].cj=L->data[j].cj;}strcpy(L->data[i].xh,xs->xh);strcpy(L->data[i].xm,xs->xm);L->data[i].cj=xs->cj;L->length=L->length+1;}return 0;}int cz(SqList *L) //查找信息char xh[40];char xm[40];int cj;int i=0,u;printf(" 1、按学号查询\n"); printf(" 1、按姓名查询\n"); printf(" 1、按成绩查询\n"); printf("请选择:");fflush(stdin);scanf("%d",&u);if (u==1){printf("请输入要查找学生的学号:");scanf("%s",xh);for(i=0;ilength;i++){篇二:单链表的实验报告辽宁工程技术大学上机实验报告篇三:单链表实验报告实验一线性表基本操作的编程实现--线性表在链表存储下的主要操作实现班级:T523-1 姓名:王娟学号:33完成日期: 地点:5502学时:2学时一、需求分析【实验目的】通过本次实验,对课堂上线性表的知识进行巩固,进一步熟悉线性表的链接存储及相应的基本操作;并熟练掌握VC++ 6.0操作平台,学会调试程序,以及编写电子实验报告【实验要求】编写线性表的基本操作,有构造线性表,线性表的遍历,插入,删除,查找,求表长等基本功能,在此基础上能够加入DOS下的图形界面以及学会文件的操作等功能,为以后的学习打下基础。

程序设计基础综合实验 综合实验四:学生电子通讯录管理系统—链表的应用实验报告

程序设计基础综合实验   综合实验四:学生电子通讯录管理系统—链表的应用实验报告
实验名称: 班 级: 实验地点:
**大学**学院
程序设计基础综合实验 实验报告
综合实验四:学生电子通讯录管理系统—
一、实验内容:
问题描述:基于结构体链表,重新设计“综合实验二:学生电子通讯录管理系统——数组的 应用”里涉及的学生电子通讯录管理系统,要求重新设计后的系统应用以下功能。
二、实验源代码:
三、实验结果与分析(含测试数据、运行结果截图、分析和实验总结等):
四、教师评语: 实验成绩:
教师:谢胜利
1.链表应用:输入功能。基于用户键盘输入,创建学生个人通讯信息链表,要求对用户输入 的个人信息进行有效性检查。
2.链表应用:输出功能。在上面设计的基础上,设计链表输出函数。 3.链表应用:查找功能。在上面设计的基础上,设计链表查找函数。要求可以根据 1)学号 查找、2)姓名查找、3)手机查找、4)性别查找、以及 5)生日范围查找等。然后,在显示器上 输出查找到的学生信息。 4.链表应用:插入功能。在上面设计的基础上,设计节点插入函数; 5.链表应用:删除功能。在上面设计的基础上,基于查找函数,设计节点删除函数,要求能 够根据查找的结果删除相应的节点。然后,在显示器上显示删除后的链表内容。 6.链表应用:排序功能。在上面设计的基础上,设计链表排序函数。要求可以根据 1)学号 排序、2)姓名排序、3)性别排序、4)手机排序、以及 5)生日排序等。然后,在显示器上,输 出排序后的通讯录。 7.链表应用:保存功能。在上面设计的基础上,设计链表保存到外部文件的函数; 8.链表应用:创建功能。在上面设计的基础上,设计基于外部文件创建链表的函数。

c学生信息管理系统(链表文件)实验报告

c学生信息管理系统(链表文件)实验报告

学生信息管理系统XX大学二○一二~二○一三学年第二学期xxxxxxx学院面向对象C++语言课程设计报告课程名称:面向对象C++语言课程设计班级:____学号:____________________姓名:_________指导教师:______________________二○一三年六月目录一、系统需求与功能分析 (3)1.1 系统需求分析 (3)1.2系统功能分析 (3)1.3系统性能分析 (4)二、总体结构设计 (5)2.1系统的结构设计 (5)2.2系统管理流程图 (5)三、系统详细设计和系统实现 (7)四、系统测试 (13)五、测试结果 (14)六、心得体会 (19)七、附录 (20)附录一:源程序清单 (20)附录二:运行结果 (32)一、系统需求与功能分析1.1 系统需求分析(1)能完成学生信息的录入,插入、修改、删除、输出、查询等功能;(2)采用单链表存储结构实现;(3) 所有数据以外部文件方式保存。

1.2系统功能分析(1)要设计一个学生信息管理系统,其功能包括:①录入函数Add():将学生信息按尾插法插入到链表中;②插入函数Insert():根据所给学号作为插入位置,在其后插入信息;③修改函数Modify():修改指定的学生信息;④删除函数Delete():当需要删除的学号和姓名一致时则删除对应的学生记录;⑤输出函数Show():显示全部学生信息;⑥查询函数Search():分别可以按学号和按姓名进行学生信息查询;⑦菜单函数Menu():为程序的菜单函数为实现各种功能提供便捷;⑧读取数据函数Read():从外部文件读取学生信息信息;⑨保存数据函数Save():将数据保存到外部文件中。

(2)线性表的链接存储结构称为单链表,单链表使用一组任意的存储单元存放线性表的元素,这组存储单元可以连续也可以不连续,甚至可以零散分布在内存中的任意位置。

为了正确表示元素之间逻辑关系,每个存储单元在存储数据元素的同时,还必须存储其后继元素所在地址信息,这个地址信息称为指针,这两部分组成了数据元素的存储映像,称为结点,结点结构如图 1.1所示。

c语言程序设计报告链表实现学生信息管理

c语言程序设计报告链表实现学生信息管理
}
else // 原本有学生记录
{
t->next=p->next; // new node insert to the rear of the head node.
p->next=t; // two steps
}
}
void Delete(NODE *head) // 定义删除函数
{
NODE* p=head,*t=p->next;
1. 浏览学生信息
3. 删除学生信息
4. 修改学生信息
5. 保存学生信息
四、详细介绍
1、浏览学生信息
2、插入学生信息
3、删除学生信息
4、修改学生信息
5、信息的写入读出
6、学生信息的保存与释放
五、课程设计实践小节
这是这学期的第一次正式的程序设计,目的是运用链表来实现学生的学籍信息管理。在学习过程中,我不仅把以前的函数循环搭配使用了起来,也接触到链表这些全新的概念。
最重要的收获其实还是写编码的重要性。我这边接触过一些华为之类的程序设计员,他们都有c语言设计规范要求,每种固定程序的编写都有固定的格式,不按照格式的都有相应的处罚。这次的程序设计中我充分的体会到了格式的重要性,我程序的最大的问题就在于switch语句里面格式的不对称导致的出错,最后是老师发现的,这是个极大的问题。
printf("请输入要修改学生的学号:\n");
scanf("%s",p->number);
break;
case 2:
printf("请输入要修改学生的姓名:\n");
scanf("%s",p->name);
break;

学生信息管理分析系统(C++语言)实验报告

学生信息管理分析系统(C++语言)实验报告

学生信息管理分析系统(C++语言)实验报告实验目的和要求:实验目的1.巩固C基础知识;2.熟练掌握指针的应用;3.了解结构体的定义和基本操作;4.能够链表对信息表进行设计。

5.锻炼学生编程能力,解决实际问题的能力。

实验要求1.使用C语言进行程序编写2.采用函数对系统各个功能进行封装 3. 本次试验是一个综合试验,学生可以根据自己的能力选择大部分的功能予以实现。

实验内容与分析设计:实验内容及步骤用链表的形式完成一个学生信息管理分析系统;使用结构体,定义相应的数据类型;实现链表的基本功能(例如:创建、插入、删除、更新、查找等操作)每一种链表操作必须使用函数封装;实现学生基本信息及成绩所选科目成绩的录入修改和删除。

实现基本信息的查询(分系、班级;分科目)。

对每系或每班各科成绩进行分析(即求单科平均成绩、及格率和优秀率);对所开课程的成绩分析(求其平均成绩,最高分和最低分);编写主函数进行测试。

实验步骤与调试过程:1.打开Visual c++ 6.0编程环境;2.点击文件->新建、选择建立新的工程;选择Win32 Console Application选项建立工程名为“tian”的一个空工程。

3.继续点击文件->新建、选择建立新的文件;选择C++ Source File选项建立在“tian”工程下的名为“tiantian”的文件。

4.编辑源程序(使用结构体、定义相应的数据类型、实现链表的基本功能)->调试;使用class stu{} 建立一个学生类、实现基本的操作。

使用double getsum() {sum=chinese+english+math;return sum; } 来构造计算总成绩的函数使用double getaver(){average=getsum()/3;return average;} 来构造计算平均成绩的函数5.在组建选项中点击执行【tian.exe】(或者Ctrl+F5)执行程序.6.程序没有错误,正常执行tian.exe,显示学生信息管理系统。

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

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

面向对象程序设计大作业------学生信息管理系统学院名称信息科学与工程学院专业班级数学大类2011级2班学生姓名魏仿学号 201101051324指导教师孙红梅完成时间:2013年 5 月29 日ﻬ学生信息管理系统1、编程目的为方便学生信息的管理,特编写这个程序方便操作学生信息管理系统。

实现对学生姓名、学号、性别、成绩等信息的管理,可以实现学生的增加、删、查等多种功能的操作。

2、系统简介本系统实现学生信息的管理,以动态链表、结构体数据类型来实现数据的存储与加工,利用链表来实现学生信息的插入、删除、查找功能。

主要分7个模块:模块一:结构体的定义,定义struct student{};structdate{};结构体struct student{};数据成员包括:intstudentId; char name[20]; char sex[5];struct date birthday; int score; struct student *next; 其中 stru ct date birthday;又借用struct date{};结构体的成员:int year; int month; int day;以此来实现学生学号、姓名、性别、出生日期、成绩等信息的存储于处理。

模块二:ListCreate函数,函数类型为:struct student 形参:struct student *head struct student *p 返回值:head指针。

实现链表的建立功能。

模块三:ListInsert函数,函数类型为:struct student 形参:struct student *head structstudent *p返回值:head指针。

实现链表节点的插入功能。

模块四:ListDelete函数, 函数类型为:struct student 形参:struct student*head struct student *p 返回值:head指针。

链表实现学生信息菜单管理系统

链表实现学生信息菜单管理系统

链表实现学生信息菜单管理系统-标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII实验名称:链表实现学生信息菜单管理系统一、实验目的:1、掌握顺序表结构的实现方式;2、掌握顺序表常用算法的实现;3、熟悉利用顺序表解决问题的一般思路;4、参照给定的顺序表的程序样例,验证给出的顺序表的常见算法,领会顺序表结构的优点和不足。

二、实验内容:1、编程完成顺序表的基本操作:建立、删除、查找及显示。

2、按要求完成学生名册管理程序的编写和调试。

三、实验结果:1、创建:2、删除:3、添加:4、退出:四、实验中遇到的问题及解决方法:问题一:地址传递出错解决方案:参考网上资料代码。

问题二:创建时,停止暂停解决方案:输入学号为零时停止输入问题三:创建时需要学号姓名成绩都为零才能停止创建解决方案:占无解决方案五、实验心得体会:链表中指针的使用要注意指针的性质,确保地址正确传递,要改变的值正确改变。

在编程过程中很容易出现地址传递出错的问题,需要有耐心慢慢排查故障,解决故障。

通过本次实验让我明白了链表的操作使用,加深了我对链表的理解,同时也通过不断地练习提高了编程能力,链表的掌握对于这门课程而言十分重要,在今后的学习中,我需要更加努力,才能更好的掌握和使用链表。

源代码:#include <stdlib.h>#include <stdio.h>#define NULL 0#define LEN sizeof(struct student)struct student{int num;char name[20];float score;struct student *next;};int n;struct student *Create(){struct student *head;struct student *p1 = NULL;struct student *p2 = NULL;n = 0;p1 = (struct student *) malloc (LEN);p2 = p1;if(p1==NULL){printf ("\nCann't create it, try it again in a moment!\n");return NULL;}else{head = NULL;printf("请输入第%d个学生学号姓名成绩:\n",n+1);scanf("%d %s %f",&(p1->num),p1->name,&(p1->score));}while(p1->num != 0){n += 1;if(n == 1){head = p1;p2->next = NULL;}else{p2->next = p1;}p2 = p1;p1 = (struct student *) malloc (LEN);printf("请输入第%d个学生学号姓名成绩:\n",n+1);scanf("%d %s %f",&(p1->num),p1->name,&(p1->score));}p2->next = NULL;free(p1);p1 = NULL;return head;}void Print(struct student *head){struct student *p;printf ("\nNow , These %d records are:\n", n);p = head;if(head != NULL){printf("head is %o\n", head);do{printf ("%d\t%s\t%5.1f\n", p->num, p->name, p->score);p = p->next;}while (p != NULL);}}struct student *Del (struct student *head, int num){struct student *p1;struct student *p2;if (head == NULL){printf ("\nList is null!\n");return head;}p1 = head;while (p1->num != num && p1->next != NULL){p2 = p1;p1 = p1->next;}if(p1->num==num){if (p1 == head){head = p1->next;}else{p2->next = p1->next;}free (p1);p1 = NULL;printf ("\ndelete %ld success!\n", num);n -= 1;}else{printf ("\n%ld not been found!\n", num);}return head;}struct student *Insert (struct student *head, int num, struct student *node) {struct student *p1;if (head == NULL){head = node;node->next = NULL;n += 1;return head;}p1 = head;while(p1->num != num && p1->next != NULL){p1 = p1->next;}if (p1->num==num){node->next = p1->next;p1->next = node;n += 1;}else{printf ("\n%ld not been found!\n", num);}return head;}int main(void){struct student *head;struct student *stu;int thenumber;int command,flag=1;while(flag){printf("1、创建管理系统\n2、删除学生信息\n3、添加学生信息\n4、退出\n");printf("当学号姓名成绩都为0时,停止创建\n");printf("输入指令:");scanf("%d",&command);switch(command){case 1:{head = Create();Print(head);break;}case 2:{printf("\nWhich one delete: ");scanf("%d",&thenumber);head = Del(head,thenumber);Print(head);break;}case 3:{stu = (struct student *)malloc(LEN);printf("请输入第%d个学生学号,姓名,成绩:\n",n+1);scanf("%d %s %f",&(stu->num),stu->name,&(stu->score));printf("\n插到哪个学号后面: ");scanf("%d",&thenumber);head = Insert(head,thenumber,stu);Print(head);break;}case 4:flag=0;}}}。

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

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

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

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

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

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

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

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

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

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

“基于链表学生成绩管理系统”实验报告

“基于链表学生成绩管理系统”实验报告

“基于链表学生成绩管理系统”实验报告1. 需求分析1.1.开发背景学生成绩管理是一个学校不可缺少的部分,它的内容对于学校的管理者和学生来说都至关重要,所以一个良好的学生成绩管理系统应该能够为用户提供充足的信息和快捷的查询手段。

学生成绩管理系统对学校加强学生成绩管理有着极其重要的作用.学生的数量日益庞大,对于如何管理如此庞大的学生成绩数据显得更为复杂,传统的手工成绩管理不仅工作量大而且容易出现问题。

随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。

作为计算机应用的一部分,使用计算机对学生成绩信息进行管理,具有手工管理所无法比拟的优点。

这些优点能够极大地提高管理者管理的效率,也是学校走向科学化、正规化管理,与世界接轨的重要条件。

因此,开发设计这样一套学生成绩管理软件成为很有必要的事情。

1.2.数据需求该学生管理系统所需要的数据有学生学号,姓名,性别,出生日期,数学,语文,英语和平均分等数据。

1.3.功能需求该学生成绩管理系统必须基于delphi编译环境采用pascal语言开发研制,针对学生成绩及其数据特点,可以全面实现对学生成绩的插入、查询、修改、排序、删除和输出等功能。

此系统可以大大减轻了工作量,减少人为的工作失误,全面提高学生成绩管理的效率,从而使学校对于学生成绩的管理水平和技术术水平跃上一个新的台阶。

2. 概要分析2.1.功能概要2.1.1.主菜单主菜单包括学生管理系统的基本功能,主要功能如图2-1-1-1所示。

图2-1-1-1 主菜单模块图2.1.2.二级菜单修改的子菜单包括姓名,出生日期,数学,英语,语文,退出等选项,具体如图2-1-2-1所示。

图2-1-2-1 子菜单模块图2.2.子程序1.procedure Inputstuinfo(var head:pointer); 2.procedure Outputstuinfo(var head:pointer); 3.procedure Sortinfo(var head:pointer); 4.procedure Sortinfotwo(var head:pointer); 5.procedure Agesexsearch(var head:pointer); 6.procedure Agesexsearch(var head:pointer);信息录入保存文件读出文件排 序查 找增加信息删除信息修改信息主菜单退 出 系 统出生日期数 学语 文英 语退 出子菜单姓 名7.procedure Modifyinfo(var head:pointer); 8.procedure Changefig;9.procedure Deleteinfo(var head:pointer); 10.procedure Increaseinfo(var head:pointer); 11.procedure Savetofile(var stuFile:text;var head:pointer); 12.procedure Outfromfile(var stuFile:text;var head:pointer);2.3.主界面和子菜单截图主菜单如图2-3-1所示。

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

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

华北科技学院计算机系综合性实验实验报告课程名称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;}}fr(head);free(head);}数据录入源代码void create(struct xs *hd){i nt xh,gs,yy,wl,i;c har xm[20];s truct xs *p;f r(hd);p rintf("\n 请输入学生个数:");s canf("%d",&num);f or(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;}p rintf(" 录入数据完毕,请按任意键继续!\n ");g etch();}添加记录源代码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(){s ystem("cls");p rintf(" ****************************************\n");p rintf(" * 学生成绩管理系统(1.0) *\n");p rintf(" ****************************************\n");p rintf(" * jb11-1 31 宋洁2012-7-3 *\n");p rintf(" ****************************************\n");p rintf(" * 1-创建链表*\n");p rintf(" * 2-数据显示*\n");p rintf(" * 3-保存文件*\n");p rintf(" * 4-读取文件*\n");p rintf(" * 5-系统退出*\n");p rintf(" ****************************************\n");p rintf(" 请选择操作(1-5:");}源程序#include"stdio.h"代码:#include"stdio.h" #include"stdlib.h"#include<string.h>#include"conio.h"struct xs{int xh;char xm[20];int gs,yy,wl;struct xs *next;};int num=0;struct xs *init(){struct xs* hd;hd=(struct xs *)malloc(sizeof(struct xs));hd->next=NULL;return hd;}void fr(struct xs *hd){struct xs *p;p=hd->next;while(hd->next!=NULL){p=hd->next;hd->next=p->next;free(p);}}void create(struct xs *hd){int xh,gs,yy,wl,i;char xm[20];struct xs *p;fr(hd);printf("\n 请输入学生个数:");scanf("%d",&num);for(i=0;i<num;i++){printf("请输入%d个学生of %d\n",i+1,num);printf(" 学号:");scanf("%d",&xh);printf(" 姓名:");scanf("%s",xm);printf(" 高数:");scanf("%d",&gs);printf(" 英语:");scanf("%d",&yy);printf(" 物理:");scanf("%d",&wl);p=(struct xs *)malloc(sizeof(struct xs));p->xh=xh;strcpy(p->xm,xm);p->gs=gs;p->yy=yy;p->wl=wl;p->next=hd->next;hd->next=p;}printf(" 录入数据完毕,请按任意键继续!\n ");getch();}void save(struct xs *hd){if(hd->next!=NULL){struct xs *p=hd->next;int i;FILE *fp;fp=fopen("yh.txt","w");fprintf(fp,"%3d\n",num);for(i=0;i<num;i++){fprintf(fp,"%3d %12s %3d %3d %3d\n",p->xh,p->xm,p->gs,p->yy,p->wl);p=p->next;}fclose(fp);printf("\n 保存文件完毕,请按任意键继续!\n ");getch();}else{printf("\n 当前链表为空,不需要保存,请按任意键继续!\n ");getch();}}void read(struct xs *hd){int i;struct xs *p;FILE *fp;fr(hd);fp=fopen("yh.txt","r");fscanf(fp,"%3d\n",&num);for(i=0;i<num;i++){p=(struct xs *)malloc(sizeof(struct xs));fscanf(fp,"%3d %12s %3d %3d %3d\n",p->xh,p->xm,p->gs,p->yy,p->wl);p->next=hd->next;hd->next=p;}fclose(fp);printf("\n 读取文件完毕,请按任意键继续!\n ");getch();}void print(struct xs *hd){struct xs*p;p=hd->next;if(p!=NULL){printf("\n 数据显示\n");printf("**********************************************\n");printf(" 学号姓名高数英语物理平均分\n");printf("**********************************************\n");while(p!=NULL){printf("%4d ",p->xh);printf("%10s",p->xm);printf("%8d",p->gs);printf("%7d",p->yy);printf("%6d",p->wl);printf("%8.2f\n",(p->wl+p->wl+p->wl)/3.0);p=p->next;}printf("**********************************************\n");printf(" 链表显示完毕,请按任意键继续!\n");getch();}elseprintf("\n 当前链表为空,请先读取文件或创建链表!\n 按任意键继续!\n ");}void menu(){system("cls");printf(" ****************************************\n");printf(" * 学生成绩管理系统(1.0) *\n");printf(" ****************************************\n");printf(" * jb11-1 31 宋洁2012-7-3 *\n");printf(" ****************************************\n");printf(" * 1-创建链表*\n");printf(" * 2-数据显示*\n");printf(" * 3-保存文件*\n");printf(" * 4-读取文件*\n");printf(" * 5-系统退出*\n");printf(" ****************************************\n");printf(" 请选择操作(1-5:");}void main(){int xz=0;struct xs *head;head=init();while(xz!=5){menu();scanf("%d",&xz);switch(xz){case 1:create(head);break;case 2:print(head);break;case 3:save(head);break;case 4:read(head);break;case 5:printf("\n 系统退出,拜拜!\n ");break;default:printf("\n 选择错误,请按任意键选择!\n ");getch();break;}}fr(head);free(head);}。

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

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

华北科技学院计算机系综合性实验实验报告课程名称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;}}fr(head);free(head);}数据录入源代码void create(struct xs *hd){i nt xh,gs,yy,wl,i;c har xm[20];s truct xs *p;f r(hd);p rintf("\n 请输入学生个数:");s canf("%d",&num);f or(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;}p rintf(" 录入数据完毕,请按任意键继续!\n ");g etch();}添加记录源代码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(){s ystem("cls");p rintf(" ****************************************\n");p rintf(" * 学生成绩管理系统(1.0) *\n");p rintf(" ****************************************\n");p rintf(" * jb11-1 31 宋洁2012-7-3 *\n");p rintf(" ****************************************\n");p rintf(" * 1-创建链表*\n");p rintf(" * 2-数据显示*\n");p rintf(" * 3-保存文件*\n");p rintf(" * 4-读取文件*\n");p rintf(" * 5-系统退出*\n");p rintf(" ****************************************\n");p rintf(" 请选择操作(1-5:");}源程序#include"stdio.h"#include"stdlib.h"代码:#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); }。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STU Fetch(int n)
{
FILE*fp;
struct student tem;
char filename[20];
printf("\n请输入打开文件名:\n");
gets(filename);
fp=fopen(filename,"rb");
fseek(fp,(long)(n*sizeof(STU)),0);
{
STU *p=NULL;
p=Search_major_subject_score(head,major,number,score);//先查找
if (p==NULL)
return p;
else
p=Delete_num(head,p->num);//再删除
return p;
}
//---------------------------------------------主函数------------------------------------------
void print(STU *head)
{
STU *p;
p=head;
if(head!=NULL)
printf("学号\t姓名\t专业
while(p!=NULL)
{
Output(p);
p=p->next;
}
}
//--------------------------------储存--------------------------------
void main ()
{
STU *Head = NULL;
int id,num,sco;
char filename[10];
STU *p = NULL;
STU stu;
while(1)
{
printf("***********************************************************************\n");
int classNo;//班级(1-2)
int score[3];//3门课的成绩(0-2)
struct student *next;
};
typedef struct student STU;
//--------------------------------输入--------------------------------
{
printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\n",p->num,p->name,p->major,p->classNo,p->score[0],p->score[1],p->score[2]);
}
//-------------------------------输出所有---------------------------
break;
else
head=head->next;
return head;
}
//--------------------------------------删除专业课程成绩--------------------------------------
STU *Delete_major_subject(STU *head,char *major,int number,int score)
三、算法流程图
四、程序清单(关键语句和变量加注释)
#include<>//预编译命令
#include<>
#include<>
struct student
{
int num;//学号
char name[15];//姓名
char major[10];//专业(computer,software,network)
printf("*欢迎使用学生成绩管理系统*\n");
printf("***********************************************************************\n");
printf("1-建立有序的链表2-信息存盘\n");
printf("3-从文件中随机读取某个学生的信息4-查找学号学生,返回该学生结点指针\n");
printf("**********************输入相应编号运行系统*****************************\n");
head=stu;
}
else
{
stu->next=p1;
p2->next=stu;
}
else
{
p1->next=stu;//插最后面
stu->next=NULL;
}
}
return head;
}
//---------------------------------------学号删除-----------------------------
STU *Search_major_subject_score(STU *head,char *major,int number,int score)
{
if (head==NULL)
return NULL;
while(head!=NULL)
if ((strcmp(major,head->major)==0) && head->score[number]<score)
printf("5-输入一个学生信息插入相应位置6-从链表中删除指定学号的学生\n");
printf("7-查找某专业某课程成绩小于某分数的学生,返回指向该学生结点的指针\n");
printf("8-删除某个专业的、某门课程的成绩小于某个分数的学生\n");
printf("9-将学生信息表格化输出\n\n");
{
printf("\n请输入第%d个学生信息\n",n-i+1);
w=Input();
head=w;
w->next=p;
p=w;
}
}
return head;
}
//-------------------------------输出------------------------------
void Output(STU *p)
(1)main函数:以菜单形式将各项功能提供给用户,根据用户的选择,调用相应的函数。
(2)定义函数CreateList:按学号由小到大,建立有序的链表。逆序输入n个学生信息(调用n次input),学号大的先输入,建立带头结点的单链表。
(3)定义函数Output:以指向某个学生结点的指针为参数,将学生信息表格化输出。
STU*CreateList(int n)
{
struct student*head,*p,*w;
int i=0;
printf("\n请输入第%d个学生信息\n",n);
p=Input();
while(i<n)
{
i++;
if(i==1)
{
head=p;//头结点有值
p->next=NULL;
}
else
(4)定义函数Save:将某个学生信息存入文件。
(5)定义函数Fetch:从文件中随机读取某个学生的信息。
(6)定义函数Search_num:查找指定学号的学生,返回指向该学生结点的指针。
(7)定义函数InsertList:在函数中输入一个学生的信息,将该学生信息插入到链表中的相应位置,并保持此链表按学号的有序性。
head=stu;
stu->next=NULL;
}
else
{
while(p1->num<stu->num&&p1->next!=NULL)//跳过不符合的结点
{
p2=p1;
p1=p2->next;
}
if(p1->num>stu->num)
if(p1==head)//插最前面
{
stu->next=head;
scanf("%s",p->name);
printf("请输入学生的专业:");
scanf("%s",p->major);
printf("请输入学生的班级:");
scanf("%d",&p->classNo);
printf("请输入学生的成绩0:");
scanf("%d",&p->score[0]);
fread(&tem,sizeof(STU),1,fp);//读取
fclose(fp);
return tem;
}
//-----------------------------------查找学号-------------------------------
STU *Search_num(STU *head,int number)
printf("请输入学生的成绩1:");
scanf("%d",&p->score[1]);
printf("请输入学生的成绩2:");
相关文档
最新文档