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

福建工程学院计算机与信息科学系实验报告代码:#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实验名称:链表实现学生信息管理系统实验目的:通过设计链表实现学生信息管理系统,掌握链表的操作方法及其应用。
实验内容:设计一个学生信息结构体,包括学号、姓名、性别、年龄和成绩五个成员变量,并选择链式结构存储这些数据。
实现以下功能: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语言程序设计实训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课程设计报告单链表学生信息管理系统

.学生信息管理系统设计文档一、设计任务描述为了实现学籍管理的简单化,我们基于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语言课程设计学生信息管理系统姓名洪伟生院系计算机学院日期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、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
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:");