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

合集下载

数据结构 用链表实现学生信息管理系统

数据结构 用链表实现学生信息管理系统

3、4、7、#include <iostream>using namespace std;//实现线性表的链式存储结构的类型定义typedef int Elemtype;#define OK 1;#define ERROR -1;struct NODE //结点类型{Elemtype elem;NODE *next;};struct LINK_LIST //链表类型{NODE *head;};//典型操作的算法实现//初始化链表Lint InitList(LINK_LIST *L){L->head = (NODE*)malloc(sizeof(NODE)); //为头结点分配存储单元if (L->head) {L->head->next=NULL; return OK;}else return ERROR ;}//销毁链表Lvoid DestoryList(LINK_LIST *L){NODE *p;while (L->head) //依次删除链表中的所有结点{p=L->head; L->head=L->head->next;free(p);}}//清空链表Lvoid ClearList(LINK_LIST *L){NODE *p;while (L->head->next){ //p指向链表中头结点后面的第一个结点p=L->head->next;L->head->next=p->next; //删除p结点free(p); //释放p结点占据的存储空间}}//求链表L的长度int ListLength(LINK_LIST L){NODE *p;int len;len=0;for(p=L.head;p->next!=NULL; p=p->next)len++ ;return(len);}// 判链表L空否。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

基于链表实现的学生信息管理系统

基于链表实现的学生信息管理系统

实验报告姓名:院系专业:学号:完成日期:2010年11月1日实验题目:基于链表实现的学生信息管理系统◆需求分析:该程序是基于链表实现的学生信息管理系统,可以完成学生数据的录入、添加、删除、修改、排序、查找等多项功能。

输入均要按照提示给出,否则都会有错误提示,用户必须重新输入数据。

◆概要设计本程序通过建立链表的方法,实现系统的基本功能。

◆调试分析通过多次输入正确数据得到结果,来检验程序的正确性。

经过多次该调试方法的运用,本程序编写无误。

◆用户使用说明1.输入的说明:首先弹出提示,即使用学生信息管理系统菜单2.输入一个阿拉伯数字,大小为从0到6的整数,从而得到不同的系统功能。

输入1是录入或者添加学生数据,输入2是删除学生数据,输入3是修改学生数据,输入4是让学生数据按照学号大小排列,输入5是通过不同的关键词查找学生数据,输入6是显示目前所有储存好的学生数据,输入0是退出该系统。

3.当输入5时,弹出查找菜单:输入一个阿拉伯数字,大小为从0、7到9的整数,从而得到不同的系统功能。

输入7是通过学生学号查找学生信息,输入8是通过学生姓名查找,输入9是通过学生性别查找学生信息,输入0是退出系统。

4.输入一个字母,y或者n。

输入y是继续录入学生数据;输入n是退出添加功能,返回管理系统主菜单。

输入一个字母,y或者n。

输入y是继续删除学生数据;输入n是退出删除功能,返回管理系统主菜单。

输入一个字母,y或者n。

输入y是继续修改学生数据;输入n是退出修改功能,返回管理系统主菜单。

输入一个字母,y或者n。

输入y是继续查找学生数据;输入n是退出查找功能,返回管理系统主菜单。

测试结果1.输入1时:可以录入或者添加学生数据分别输入学生信息,学号:09388187,姓名:邓宇婷,性别:女。

数据录入成功!2.数据录入成功时,学生数据将存储入文件d:\\document中:①输入y时,继续数据的录入:②输入n时,重新返回信息管理系统菜单:3.输入2时,根据学生学号删除学生信息:数据删除成功!如果该学号学生不存在:系统提示该输入错误!4.输入3时,根据学生学号修改学生信息:数据修改成功!如果该学号学生不存在:系统提示该输入错误!5.输入4时,学生数据根据学生学号由小到大排列:6.输入5时,弹出查找菜单:①输入7时,根据学生学号查找学生信息:数据查找成功!如果该学号学生不存在:系统提示该输入错误!②输入8时,根据学生姓名查找学生信息:数据查找成功!如果该输入姓名的学生不存在:系统提示该输入错误!③输入9时,根据学生性别查找学生信息:数据查找成功!7.输入6时,输出目前所有储存的学生信息:8.当输入错误指令时,有错误提示:输入错误时,弹出提示,重新输入指令!◆实验心得(具体内容不作硬性要求)该实验是通过链表实现学生信息管理系统的各个功能,在编译过程中,发现了很多关于程序健壮性的问题,在解决这些问题上,不仅提高了自己编程的能力,更加完善了对程序的各种要求。

基于单链表的学生信息管理系统源代码

基于单链表的学生信息管理系统源代码

软件学院项目报告书课程:专业实训项目名称: 学生信息管理系统专业年级: 软件工程Java2级姓名: ××学号: ×××××指导教师: ××2011年06月14日目录第1章问题描述 (2)1.1 课题背景 (2)1.2需求分析 (3)1.2.1 功能需求 (3)1.2.2 性能需求 (4)1.3本章小结 (4)第2章总体设计 (5)2.1系统介绍 (5)2.2主程序执行流程图 (6)第3章代码设计 (7)3.1程序运行结果截图 (7)3.2程序源代码 (11)3.3本章小结 (17)第4章总结 (18)参考文献 (19)第1章问题描述1.1 课题背景管理系统是使用电子计算机执行管理和决策功能的服务系统,是六十年代以后,随着系统科学,信息技术以及计算机科学的进展,适应现代化管理的需要而形成的一门边缘学科。

它是将计算机硬件,软件,人工规程,管理制度,决策模拟以及管理人员等组合在一起的一个人--机系统。

学生信息管理系统,是针对目前学生信息处理工作的实际情况,结合数据技术,设计开发的学生信息管理系统;能够实现创建、添加、插入、排序、查找、修改学生信息等。

学生信息管理系统是典型的信息管理系统,其开发主要包括前端应用程序的开发和后台数据库的建立和维护两个方面。

对前者要求应用功能完备,容易使用,界面友好等;而对后者则要求建立起数据库一致性和完整性强,数据安全性好的数据库。

学生信息管理系统是教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说至关重要,能够为学校的管理者提供充足的学生信息和快捷的查询手段。

1.2 需求分析1.2.1 功能需求(1)本系统具有很强的可靠行,可以对录入的学生信息进行效验,对数据进行修改、删除,可以方便管理员的修改与维护。

(2)本系统操作方便、灵活、简单。

操作人员只需录入学生的基本信息和考试成绩的数据。

学生信息管理系统(C语言基于链表文件)

学生信息管理系统(C语言基于链表文件)

#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<windows.h>#include<string.h>#define LEN sizeof(struct student)#define DAT_FILENAME "Information.txt"/**********************定义数据结构********************/struct date{i nt year;i nt month;i nt day;};struct student{i nt ID;c har Name[8];i nt age;c har xb;c har telephone[15];c har address[40];s truct date birthday;c har email[40];s truct student *next;};/*************************函数原型*********************/void DispMainMenu();void DisplayInformation(struct student *head);struct student *FindstudentID(struct student *head,int findID);struct student *FindstudentName(struct student *head,char findname[]);struct student *InformationInput(struct student *head);void QueryInformation(struct student *head);struct student *EditInformation(struct student *head);struct student *Insert(struct student *head,struct student *p);void Save(struct student *head);struct student *Read(struct student *head);struct student *Delete(struct student *head,int findID);struct student *Add(struct student *head);void Help();/************************显示主菜单***************************/void DispMainMenu(){p rintf("*********************************学生信息管理系统******************************\n");p rintf("\n");p rintf("\t\t\t\t1--信息录入\n");p rintf("\n");p rintf("\t\t\t\t2--信息修改\n");p rintf("\n");p rintf("\t\t\t\t3--信息查询\n");p rintf("\n");p rintf("\t\t\t\t4--保存数据到文件\n");p rintf("\n");p rintf("\t\t\t\t5--打开数据文件\n");p rintf("\n");p rintf("\t\t\t\t6--文件追加\n");p rintf("\n");p rintf("\t\t\t\t7--帮助\n");p rintf("\n");p rintf("\t\t\t\t0--退出\n");p rintf("\n");p rintf("友情提示:初次使用请先阅读帮助\n");p rintf("********************************************************************* **********\n");p rintf("请选择(0-7):");/*显示主菜单*/}/*************************************帮助**************************************************/void Help(){p rintf("\n\t\t\t欢迎进入帮助系统!\n\n");printf("\t1.请按照主菜单提示选择所需执行功能的数字代号!\n");p rintf("\t2.所有文件请按照规范输入\n");p rintf("\t3.刚开始执行程序时若需要文本文件里的数据,请先进行读取文件信息!\n");p rintf("\t4.修改信息以后,请切记需要保存!\n");p rintf("\n");}/***********************显示所有学生信息**********************/void DisplayInformation(struct student *head){s truct student *p;p rintf("*******************************************************************************");p rintf("\n学号\t姓名\t年龄\t性别\t 电话\t\t地址\t 出生年月\t email\n");p=(struct student *)malloc(LEN);p=head;i f(head!=NULL)while(p!=NULL){printf("%-d\t%-s\t%-d\t",p->ID,p->Name,p->age);printf("%-c\t%-s\t%-s\t",p->xb,p->telephone,p->address);printf("%-d %d %d",p->birthday.year,p->birthday.month,p->birthday.day);printf("\t%-s\n",p->email);p=p->next;}e lseprintf("无数据\n");}/**************************查找指定学号的学生信息******************************/struct student *FindstudentID(struct student *head,int findID){s truct student *p;p=(struct student *)malloc(LEN);p=head;i f(head!=NULL)while(p!=NULL){if(p->ID==findID)break;p=p->next;}e lseprintf("无数据\n");r eturn p;}/***************************查找指定姓名的学生信息**********************/struct student *FindstudentName(struct student *head,char findname[]){s truct student *p;p=(struct student *)malloc(LEN);p=head;i f(head!=NULL)while(p!=NULL){if(strcmp(p->Name,findname)==0)break;p=p->next;}elseprintf("无数据\n");r eturn p;}/********************学生信息录入**********************************/ struct student *InformationInput(struct student *head){i nt number,i;s truct student *p;p=(struct student *)malloc(LEN);p rintf("\n请输入本次录入的学生人数:");s canf("%d",&number);f or(i=0;i<number;i++)/*输入number 个学生的信息*/{printf("请输入第%d个学生的学号(八个字符以内):",i+1);scanf("%d",&p->ID);printf("\t\t\t 姓名:\t");scanf("%s",p->Name);printf("\t\t\t 年龄:\t");scanf("%d",&p->age);printf("\t\t\t 性别(男M、女W):");scanf("%s",&p->xb);printf("\t\t\t 电话(八位):\t");scanf("%s",p->telephone);printf("\t\t\t 地址:\t");scanf("%s",p->address);printf("\t\t\t 出生年月:\t");scanf("%d%d%d",&p->birthday.year,&p->birthday.month,&p->birthday.day);printf("\t\t\temail:\t");scanf("%s",p->email);head=Insert(head,p);p=(struct student *)malloc(LEN);}p rintf("\n 您的输入信息是:\n");DisplayInformation(head);r eturn(head);}/**************************学生信息查询*************************/void QueryInformation(struct student *head){c har select;i nt findID;c har findname[8];s truct student *p;p rintf("*********************请选择查询方式*************************\n");p rintf("\t1--按学号查询;\t2--按姓名查询\n");p rintf("************************************************************\n");p rintf("请选择(1-2):");/*显示菜单信息*/s elect=getche();g etch();s witch (select){case'1':printf("\n 按学号查询\n 请输入学生的学号:");scanf("%d",&findID);if((p=FindstudentID(head,findID))!=NULL) /*找到指定学号的学生*/{printf("\n 查找结果如下:\n");printf("\n学号\t姓名\t年龄\t性别\t 电话\t\t地址\t 出生年月\t email\n");printf("%d\t%s\t%d\t",p->ID,p->Name,p->age);printf("%c\t%s\t%s\t",p->xb,p->telephone,p->address);printf("%d %d %d",p->birthday.year,p->birthday.month,p->birthday.day);printf("\t%s\n",p->email);}else /*没有找到*/printf("您输入的学号不存在!\n");break;case'2':printf("\n 按姓名查询\n 请输入学生的姓名:");scanf("%s",&findname);if((p=FindstudentName(head,findname))!=NULL) /*找到指定姓名的学生*/{printf("\n 查找结果如下:\n");printf("\n 学号\t 姓名\t 年龄\t 性别\t 电话\t 地址\t 出生年月\t email\n");printf("%d\t%s\t%d\t",p->ID,p->Name,p->age);printf("%c\t%s\t%s\t",p->xb,p->telephone,p->address);printf("%d %d %d",p->birthday.year,p->birthday.month,p->birthday.day);printf("\t%s\n",p->email);}else /*没有找到*/printf("您输入的姓名不存在!\n");break;default:printf("选择错误!\n");}}/*********************************修改学生信息***********************/struct student *EditInformation(struct student *head){i nt findID;c har select;s truct student *p;p rintf("\n 请输入学生的学号:");s canf("%d",&findID);i f((p=FindstudentID(head,findID))!=NULL) /*找到指定学号的学生*/{printf("*********************请修改方式*************************\n");printf("\t1--修改信息;\t2--删除信息\n");printf("************************************************************\n");printf("请选择(1-2):");select=getche();getch();switch (select){case'1': /*修改信息*/printf("您选择的是修改信息!\n");printf("姓名:%s\n",p->Name);printf("原信息:学号:%d\t 年龄:%d\t 性别:%c\n",p->ID,p->age,p->xb);printf("\t 电话:%s\t 地址:%s\temail:%s\n",p->telephone,p->address,p->email);printf("请输入新信息\n");printf("学号\t");scanf("%d",&p->ID);printf("姓名:\t");scanf("%s",p->Name);printf("年龄:\t");scanf("%d",&p->age);printf("性别(男M、女W):");scanf("%s",&p->xb);printf("电话:\t");scanf("%s",p->telephone);printf("地址:\t");scanf("%s",p->address);printf("出生年月:\t");scanf("%d%d%d",&p->birthday.year,&p->birthday.month,&p->birthday.day);printf("email:\t");scanf("%s",p->email);break;case'2': /*删除信息*/printf("您选择的是删除信息!\n");head=Delete(head,findID);break;}}e lse /*没有找到学号匹配的记录*/printf("您输入的学号不存在!\n");r eturn (head);}/**************************有序插入***************************************/struct student *Insert(struct student *head,struct student *p){s truct student *p0,*p1;i f(head==NULL){head=p;p->next=NULL;return(head);}i f(p->ID<head->ID){p->next=head;head=p;return(head);}p1=head;w hile((p->ID>p1->ID)&&(p1->next!=NULL)){p0=p1;p1=p1->next;}i f(p->ID<p1->ID){p->next=p1;p0->next=p;}e lse{if(p->ID==p1->ID);else{p1->next=p;p->next=NULL;}}r eturn(head);}/*******************************保存数据到文件**************************/void Save(struct student *head){F ILE *fp;s truct student *p;p=head;i f((fp=fopen(DAT_FILENAME,"w+"))!=NULL) /*以W+的方式打开文件*/{while(p!=NULL){fprintf(fp,"%d\t",p->ID);fprintf(fp,"%s\t",p->Name);fprintf(fp,"%d\t",p->age);fprintf(fp,"%c\t",p->xb);fprintf(fp,"%s\t",p->telephone);fprintf(fp,"%s\t",p->address);fprintf(fp,"%d %d %d\t",p->birthday.year,p->birthday.month,p->birthday.day);fprintf(fp,"%s\n",p->email);p=p->next;}/*将链表的内容写入文件*/fclose(fp);}e lseprintf("cannot open file\n");}/***************************打开数据文件************************/struct student *Read(struct student *head){s truct student *p;p=(struct student *)malloc(LEN);F ILE *fp;i f((fp=fopen(DAT_FILENAME,"r"))!=NULL){/*读取文件中的内容到链表中*/while(fscanf(fp,"%d\t",&p->ID)!=EOF){fscanf(fp,"%s\t",p->Name);fscanf(fp,"%d\t",&p->age);fscanf(fp,"%c\t",&p->xb);fscanf(fp,"%s\t",p->telephone);fscanf(fp,"%s\t",p->address);fscanf(fp,"%d %d %d\t",&p->birthday.year,&p->birthday.month,&p->birthday.day);fscanf(fp,"%s\n",p->email);head=Insert(head,p);p=(struct student *)malloc(LEN);}fclose(fp);}e lseprintf("cannot open file\n");r eturn head;}/**************************文件内容追加************************/ struct student *Add(struct student *head){h ead=Read(head);h ead=InformationInput(head);r eturn (head);}/**************************删除信息****************************/struct student *Delete(struct student *head,int findID){s truct student *pre,*p;i f(head->ID==findID){p=head;head=head->next;}e lse{pre=head;p=pre->next;while(p!=NULL&&p->ID!=findID){pre=p;p=p->next;}if(p->ID==findID)pre->next=p->next;}f ree(p);r eturn (head);}/*********************************主函数***************************/void main(){c har select,c;s truct student *head;h ead=NULL;s elect=0;w hile(select!='0'){DispMainMenu();select=getche();getch();switch(select){case'0':printf("\n您选择的是退出!\n");_beep(300,400);continue;case'1':system("cls");printf("\n您选择的是信息录入!\n");head=InformationInput(head);break;case'2':system("cls");printf("\n您选择的是信息修改!\n");head=EditInformation(head);break;case'3':system("cls");printf("\n您选择的是信息查询!\n");QueryInformation(head);break;case'4':system("cls");printf("\n您选择的是保存数据到文件!\n");Save(head);break;case'5':system("cls");printf("\n您选择的是打开数据文件!\n");if((head=Read(head))!=NULL)DisplayInformation(head);break;case'6':system("cls");printf("\n您选择的是文件追加!\n");head=Add(head);break;case'7':system("cls");printf("\n您选择的是帮助!\n");Help();break;default:printf("\n选择错误!请重新选择!\n");}printf("请选择返回主界面或退出!\n"); //选择是否继续printf("主界面:1\t退出:2\t");scanf("%d",&c);while(!(c==1||c==2)){printf("选择错误,请重新选择!");printf("\n主界面:1\t退出:2\t");scanf("%d",&c);}if(c==1)system("cls");else{system("cls");_beep(300,400);printf("\n\t您已安全退出!\n");break;}}}。

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 ):查找指定的学生,返回指向该学生结点的指针。

学生管理系统(链表版)

学生管理系统(链表版)

first=s; } else { q=first; while(q->next !=p)//查找待插入的节点 p 的前驱节点 q q=q->next ; q->next =s;//将新节点 s 插入在 q 和 p 之间 s->next =p; } return first; } //在 first 指向的单链表中,删除学号为 a 的节点 Lnode *delete_(Lnode **first,int a)//学号为 a { Lnode *q=*first,*p=*first; if(*first==NULL) //如果链表为空链表 return NULL; if((*first)->data.num==a)//如果被删除的节点是首节点 { p=*first; *first=(*first)->next; return p; } for(q=*first;q->next;q=q->next)//如果待删除节点是中间节点 { p=q->next; if(p->data.num==a)//找到符合要求的节点 { q->next=p->next;//删除节点 p return p; } } return NULL; } //在 first 指向的单链表中,查找学号为 num 的节点 Lnode *find(Lnode *first,int num) {
//按数学成绩排序的总算法 Lnode *sortmath(Lnode *first); //按平均分成绩排序的总算法 Lnode *sortaverage(Lnode *first); //在 first 指向的单链表中,按 math 排序 Lnode *sort_math(Lnode *first,Lnode *s); //链表的倒置 Lnode *reverse(Lnode *first); //按计算机最大值排序 void maxcomputer(Lnode *first); //按英语最大值排序 void maxenglish(Lnode *first); //按平均分最大值排序 void maxaverage(Lnode *first); //按数学最大值排序 void maxmath(Lnode *first); //在 first 指向的单链表中,按 average 排序 Lnode *sort_average(Lnode *first,Lnode *s);

使用链表实现简单的学生信息录入系统

使用链表实现简单的学生信息录入系统
return 0;
printf("请输入你想要插入学生的学号:"); scanf("%ld",&p->sId); printf("请输入你想要插入学生的姓名:");
scanf("%s",p->sName);
int j=1; if(pHead == NULL) {
if (i == 0) {
pHead->pNext = p; p->pNext = NULL; } else { printf("无法插入!\n"); return 0; } } while((j < i-1) && (pTemp != NULL)) { pTemp = pTemp->pNext; j++; } if(pTemp == NULL)
//查找学生 void FindStudentLink(student *pHead,long iId) {
student *pTemp; pTemp = pHead->pNext;
int ifFind = 0; if(pHead->pNext == NULL)
printf("链表为空,无法查找!\n"); while(pTemp != NULL) {
struct STUDENT *pPre; //指向前一个学生
}student;
//创建链表 student * CreateLink() {
student *pHead; //链表头 pHead = (student *)malloc(sizeof(student)); pHead->pNext = NULL; pHead->pPre = NULL;

数据结构单链表应用(简易学生信息管理系统)

数据结构单链表应用(简易学生信息管理系统)

数据结构单链表应用(简易学生信息管理系统)1这是主文件建立文件“student-main.cpp”粘贴保存#include#include#include#include#include"student-fun.cpp"#define PRINT "%6d %12s %5.2f\n",p->num,p->name,p->score //定义输出格式#define PRINTF " 学号姓名成绩\n"char cmd;int num;lklist L;void jiemian(){ system("cls");printf("\n***************************************************** ****************** *");printf("\n****** 欢迎使用简易班级学生信息系统********");printf("\n**************");printf("\n******i--增加学生d--删除学生q--退出系统********");printf("\n****** f--查询c--修改l--列出所有学生信息********");printf("\n***************************************************** ****************** *\n");}void ReadCommand(){do {printf("\n 请根据提示输入命令: ");fflush(stdin); //清除文件缓冲区,文件以写方式打开时将缓冲区内容写入文件scanf("%c",&cmd);} while (cmd!='i'&&cmd!='d'&&cmd!='l'&&cmd!='q'&&cmd!='f'&&c md!='c');}void Interpret()switch(cmd){case 'i': insert_lklist(L); break;case 'd': del_lklist(L);break;case 'l': list_lklist(L); break;case 'f': find_lklist(L);break;case 'c': cor_lklist(L);break;case 'q': exit(0);}}void main(){L=initial_lklist();do { jiemian();ReadCommand();Interpret();system("pause"); //暂停,按任意键继续。

C语言链表实现学生管理系统

C语言链表实现学生管理系统

C语⾔链表实现学⽣管理系统本⽂实例为⼤家分享了C语⾔链表实现学⽣管理系统的具体代码,供⼤家参考,具体内容如下#include<stdio.h>#include<ctype.h>#include<fstream>#include<stdlib.h>#include<string.h>#include<iostream>using namespace std;typedef struct ndoe{char id[10];char name[10];char sex[3];char num[10];struct node *next;}student;struct Student{student data;struct Student *next;};/********创建学⽣信息**********/Student * insert(Student * head){Student * s,*r;head=(Student *)malloc(sizeof(Student));printf("请输⼊学⽣的个数:");int n;scanf("%d",&n);r=head;printf("按照“学号姓名性别(M or G) ⼿机号”的形式输⼊每个学⽣的信息\n");for(int i=0;i<n;i++){s=(Student *)malloc(sizeof(Student));/*scanf("%s",s->data.id);scanf("%s",s->);scanf("%s",s->data.sex);scanf("%s",s->data.num);*/scanf("%s%s%s%s",s->data.id,s->,s->data.sex,s->data.num);r->next=s;r=s;}r->next=NULL;printf("录⼊成功\n");return head;}/********增加学⽣************/void add(Student *head){Student *s;s=head->next;while(s->next!=NULL)s=s->next;Student *ad=(Student *)malloc(sizeof(Student));ad->next=NULL;s->next=ad;//printf("输⼊新学⽣的信息:\n");scanf("%s%s%s%s",ad->data.id,ad->,ad->data.sex,ad->data.num);printf("添加成功\n");return ;}/*************修改学⽣信息********************/void change(Student * head){printf("输⼊1,按学号搜索学⽣,并修改改学⽣的信息\n");printf("输⼊2,按姓名搜索学⽣,并修改改学⽣的信息\n");Student * s;int n;scanf("%d",&n);switch(n){case 1:{printf("请输⼊学号:");char number[10];scanf("%s",number);s=head->next;while(s!=NULL){if(strcmp(s->data.id,number)==0){printf("请输⼊要修改的信息:");char phone[10];scanf("%s",phone);strcpy(s->data.num,phone);printf("修改成功\n");break;}s=s->next;}break;}case 2:{printf("请输⼊姓名:");char nam[10];scanf("%s",&nam);s=head->next;while(s!=NULL){if(strcmp(s->,nam)==0){printf("请输⼊要修改的信息:");char phone[10];scanf("%s",phone);strcpy(s->data.num,phone);printf("修改成功\n");break;}s=s->next;}break;}}return ;}/**********删除学⽣信息******************/void del(Student * head){printf("输⼊1,按学号搜索学⽣,并删除该学⽣的信息\n"); printf("输⼊2,按姓名搜索学⽣,并删除该学⽣的信息\n"); Student * s,*r;int n;scanf("%d",&n);switch(n){case 1:{printf("请输⼊学号:");char number[10];scanf("%s",number);s=head->next;r=head;while(s!=NULL){if(strcmp(s->data.id,number)==0){r->next=s->next;free(s);printf("删除成功\n");break;}r=s;s=s->next;}break;}case 2:{printf("请输⼊姓名:");char nam[10];scanf("%s",&nam);s=head->next;r=head;while(s!=NULL){if(strcmp(s->,nam)==0){r->next=s->next;free(s);printf("删除成功\n");break;}r=s;s=s->next;}break;}}return ;}/**********查询学⽣的信息**********************/void check(Student * head){printf("输⼊1,按学号搜索学⽣,并展⽰该学⽣的信息\n");printf("输⼊2,按姓名搜索学⽣,并展⽰该学⽣的信息\n");Student * s,r;int n;scanf("%d",&n);switch(n){case 1:{printf("请输⼊学号:");char number[10];scanf("%s",number);s=head->next;while(s!=NULL){if(strcmp(s->data.id,number)==0){printf("%s %s %s %s\n",s->data.id,s->,s->data.sex,s->data.num); break;}s=s->next;}break;}case 2:{printf("请输⼊姓名:");char nam[10];scanf("%s",&nam);s=head->next;while(s!=NULL){if(strcmp(s->,nam)==0){printf("%s %s %s %s\n",s->data.id,s->,s->data.sex,s->data.num); break;}s=s->next;}break;}}if(s==NULL)printf("该学⽣不存在\n");return ;}int main(){Student *head=NULL;Student *a;printf("***欢迎进⼊学⽣管理系统***\n");printf("***1:请录⼊学⽣信息***\n");printf("***2:请修改学⽣信息***\n");printf("***3:请删除学⽣信息***\n");printf("***4:请查询学⽣信息***\n");printf("***5:请添加新学⽣信息**\n");printf("***6: 退出管理系统 ***\n");printf("*************************\n");printf("请输⼊命令:");int n;while(scanf("%d",&n)&&n!=6){switch(n){case 1:{printf("请录⼊学⽣信息:\n");head=insert(a);break;}case 2:{printf("请改学⽣信息:\n");change(head);break;}case 3:{cout<<"请删除学⽣信息:"<<endl;del(head);break;}case 4:{cout<<"请查询学⽣信息:"<<endl;check(head);break;}case 5:{cout<<"请添加新学⽣信息:"<<endl;add(head);break;}default :break;}printf("请继续输⼊命令:");}Student *s,*r;s=head->next;while(s!=NULL){r=s->next;free(s);s=r;}free(head);return 0;}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

链表实现学生学籍管理系统

链表实现学生学籍管理系统

#include <stdio.h>#include <string.h>#include <stdlib.h>#define N 15 //学号位数#define M 15 //姓名字节数#define L 4 //成绩的科数int aa=0;//记录筛选时打开的文void printf_(struct stu *); //输出单个的学生数据struct stu * scanf1_(); //接收单个的学生数据,返回指针,struct stu * scanf_(); //得到学生的数据,并放入到链表中void print_(struct stu *); //输出链表中的学生信息struct stu *num_paixu(struct stu *); //用链表给学生排序void chaxun(struct stu *); //根据学生的学号查询学生的信息,并把学生的数据输出struct stu * charu(struct stu *); //将学生的数据插入到顺序排放的链表中,并且插入后也是顺序排放的。

struct stu * shanchu(struct stu *); //删除数据void xiugai(struct stu *); //修改学生的信息。

void fprint_(struct stu *); //把数据写入到文件int to_ji(struct stu *); //统计学生的总人数int t_ji_tj(struct stu *); //统计成绩在某一区间内的人数struct stu * ch_ji_paixu(struct stu *); //按成绩排序,默认的是按总成绩排序struct s *shaixuan(struct stu *); //筛选符合条件的数据,得到符合条件的结构体数据的指针。

void shuchu_shai(struct s *); //输出筛选出来的数据void fb_shu_shai(struct s *); //将筛选出来的数据输入到文件中void avrage(struct stu *head,float *); //计算平均成绩void fb_avrage(float *); //将平均成绩放在文件的最后面//建立学生结构体struct stu{char num[N];char name[M];int ch_ji[L];struct stu *next;};//建立一个链表,存放学生结构体的指针struct s{struct stu *p;struct s *ps;};void main(){int i,n,x=1,k=0;float a[L]={0};struct stu *head=NULL;struct s *shead=NULL;char ch;while(x){ system("cls");printf("********************************************************************* **********\n");printf(" 0---退出系统1---录入数据\n");printf(" 2---保存文件3---按成绩排序\n");printf(" 4---查看信息5---按学号排序\n");printf(" 6---统计人数7---按条件筛选\n");printf(" 8---查询信息9---显示筛选结果\n");printf(" 10---插入数据11---保存筛选结果\n");printf(" 12---删除数据13---计算平均成绩\n");printf(" 14---修改数据15---保存平均成绩\n");printf(" 16---按条件统计人数\n");printf("********************************************************************* **********\n");scanf("%d",&n);getchar();//有啥作用switch(n){case 0:x=0;break;case 1:head=scanf_();break;case 2:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}elsefprint_(head);break;case 3:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{head=ch_ji_paixu(head);break;}case 4:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}elseprint_(head);break;case 5:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{head=num_paixu(head);printf("是否显示排序结果Y/N ?");ch=getchar();getchar();if(ch=='y'||ch=='Y'){printf("\n");print_(head);}}case 6:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{k=to_ji(head);printf("总共有%3d 名学生",k);getchar();break;}case 7:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{shead=shaixuan(head);if(shead!=NULL&&shead->ps!=NULL){printf("是否显示筛选结果Y/N ?");ch=getchar();if(ch=='y'||ch=='Y'){printf("\n");shuchu_shai(shead);getchar();}}break;}case 8:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();}else{chaxun(head);getchar();break;}case 9:if(head==NULL||head->next==NULL) {printf("请先录入学生的数据!");getchar();break;}else{printf("\n");shuchu_shai(shead);getchar();break;}case 10:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}elsehead=charu(head);break;case 11:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{fb_shu_shai(shead);getchar();break;}if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{head=shanchu(head);break;}case 13:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{avrage(head,a);printf("平均值计算成功!\n是否显示平均成绩Y/N ?");ch=getchar();if(ch=='y'||ch=='Y'){printf("\n 语文数学英语总成绩\n");printf("%-8.2f%-8.2f%-8.2f%-8.2f",a[0],a[1],a[2],a[L-1]);getchar();}break;}case 14:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{xiugai(head);break;}case 15:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{fb_avrage(a);printf("平均值保存成功!");getchar();break;}case 16:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{k=t_ji_tj(head);if(k>0){printf("符合条件的有%3d 名学生!",k);getchar();}else if(k==0){printf("没有符合条件的学生!");getchar();}else if(k==-2)getchar();break;}default :printf("输入有误,请重新输入!");getchar();break;}}}//输出单个的学生数据void printf_(struct stu *p0){int i;printf("学号:");puts(p0->num);printf("姓名:");puts(p0->name);printf("语文数学英语总成绩\n");for(i=0;i<L;i++)printf("%-8d",p0->ch_ji[i]);printf("\n");}//接收单个的学生数据,返回指针,struct stu * scanf1_(){int i,sum=0;struct stu *p0;p0=(struct stu *)malloc(sizeof(struct stu));printf("请输入学生的学号:");gets(p0->num);printf("请输入学生的姓名:");gets(p0->name);printf("请输入学生的三科成绩(语文、数学、英语):");for(i=0;i<L-1;i++){scanf("%d",&p0->ch_ji[i]);sum+=p0->ch_ji[i];}getchar();p0->ch_ji[L-1]=sum;return p0;}//得到学生的数据,并放入到链表中struct stu * scanf_(){struct stu *p1,*p2,*head;int i,sum=0,n=0;printf("注意:当学生学号为0 时输入结束\n\n");p1=(struct stu *)malloc(sizeof(struct stu)); /*得到学生信息*/head=p2=p1;do{ printf("请输入学生的学号:");gets(p1->num);if(strcmp(p1->num,"0")==0)break;printf("请输入学生的姓名:");gets(p1->name);printf("请输入学生的三科成绩(语文、数学、英语):");for(i=0;i<L-1;i++){scanf("%d",&p1->ch_ji[i]);sum+=p1->ch_ji[i];}getchar();printf("\n");p1->ch_ji[L-1]=sum;sum=0;p1=(struct stu *)malloc(sizeof(struct stu));p2->next=p1;p2=p1;n++;}while(1);p1->next=NULL;printf("成绩输入结束!\n");getchar();/*学生的数据被放在链表中*/return head;}/*输出链表中的学生信息*/void print_(struct stu *head){int i;struct stu *p1,*p2;p1=p2=head;while(p1->next!=NULL){printf("学号:");puts(p1->num);printf("姓名:");puts(p1->name);printf("语文数学英语总成绩\n");for(i=0;i<L;i++)printf("%-8d",p1->ch_ji[i]);printf("\n");p1=p2->next;p2=p1;}getchar();}/*用链表给学生排序*/struct stu *num_paixu(struct stu *head){struct stu *p1,*p2,*p3,*p4,*p5,*p6,*p7;int x=1;for(p1=head;p1->next!=NULL;p4=p1,p1=p1->next){p3=p1;for(p2=p1->next,p5=p7=p2;p2->next!=NULL;p7=p2,p2=p2->next){if(strcmp(p3->num,p2->num)>0){p3=p2;p5=p7;}}if(p3!=p1){if(x&&p1==head){p6=p1->next;p1->next=p3->next;p3->next=p6;p5->next=p1;head=p3;p1=p3;x=0;}else{p6=p1->next;p1->next=p3->next;p3->next=p6;p4->next=p3;p5->next=p1;p1=p3;}}printf("排序成功!\n");return head;}//根据学生的学号查询学生的信息,并把学生的数据输出void chaxun(struct stu *head){char a[N];struct stu *p1;printf("请输入要查询的学号:");gets(a);p1=head;while(p1->next!=NULL){if(strcmp(p1->num,a)==0)break;p1=p1->next;}if(p1->next==NULL)printf("没有找到学号为%s 的学生!\n",a);else{printf("要查询的学生信息如下:\n\n");printf_(p1);}}//将学生的数据插入到顺序排放的链表中,并且插入后也是顺序排放的。

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

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

C语言课程设计报告链表实现学生信息管理一.课程设计目标C语言课程设计的目的是通过课程设计的综合训练,培养学生实际分析问题、编程和动手能力,最终目标是通过这种形式,帮助学生系统掌握该门课程的主要内容,更好地完成教学任务。

本课程设计具有如下特点:重点在于C语言的基本特征上,涵盖了C语言的重要基础知识。

结合了实际应用的要求,使课程设计既涵盖知识点,又接近工程实际需要。

通过激发学习兴趣,调动学生主动学习的积极性,并引导他们根据实际编程要求,训练自己实际分析问题的能力以及编程能力,并养成良好的编程习惯。

另外,在实际编程中,为了提高编程质量,希望学生在书写代码时,对空行、空格和注释严格按要求处理,以建立良好的编程风格。

二.设计项目:学生学籍管理该课程设计是设计一个模拟学生信息管理程序,要求使用链表来实现。

它具有浏览、插入、删除、修改等功能,并且能够对数据进行文件存储和读出操作。

主要功能模块:1. 浏览学生信息:显示学生的信息。

2. 插入学生信息:添加学生的信息。

3. 删除学生信息:通过输入学号删除学生的信息。

4. 修改学生信息:通过输入学号修改学生的信息。

5. 保存学生信息:将学生信息保存到文件。

0. 退出系统:结束程序的运行,结束前询问是否保存信息。

三.具体任务由老师提供主菜单程序以及第0、2个模块。

学生在这个信息系统中加入四个模块,即:1. 浏览学生信息3. 删除学生信息4. 修改学生信息5. 保存学生信息四、详细介绍1、浏览学生信息2、插入学生信息3、删除学生信息4、修改学生信息5、信息的写入读出6、学生信息的保存与释放五、课程设计实践小节这是这学期的第一次正式的程序设计,目的是运用链表来实现学生的学籍信息管理。

在学习过程中,我不仅把以前的函数循环搭配使用了起来,也接触到链表这些全新的概念。

链表的使用在今后的程序设计中尤为关键,他可以保存、调用和更改数据,在信息时代的程序设计中很重要。

在这次的程序设计中,老师和同学都是我强大的后盾。

链表实现学生学籍管理系统

链表实现学生学籍管理系统

#include <stdio.h>#include <string.h>#include <stdlib.h>#define N 15 //学号位数#define M 15 //姓名字节数#define L 4 //成绩的科数int aa=0;//记录筛选时打开的文void printf_(struct stu *); //输出单个的学生数据struct stu * scanf1_(); //接收单个的学生数据,返回指针,struct stu * scanf_(); //得到学生的数据,并放入到链表中void print_(struct stu *); //输出链表中的学生信息struct stu *num_paixu(struct stu *); //用链表给学生排序void chaxun(struct stu *); //根据学生的学号查询学生的信息,并把学生的数据输出struct stu * charu(struct stu *); //将学生的数据插入到顺序排放的链表中,并且插入后也是顺序排放的。

struct stu * shanchu(struct stu *); //删除数据void xiugai(struct stu *); //修改学生的信息。

void fprint_(struct stu *); //把数据写入到文件int to_ji(struct stu *); //统计学生的总人数int t_ji_tj(struct stu *); //统计成绩在某一区间内的人数struct stu * ch_ji_paixu(struct stu *); //按成绩排序,默认的是按总成绩排序struct s *shaixuan(struct stu *); //筛选符合条件的数据,得到符合条件的结构体数据的指针。

void shuchu_shai(struct s *); //输出筛选出来的数据void fb_shu_shai(struct s *); //将筛选出来的数据输入到文件中void avrage(struct stu *head,float *); //计算平均成绩void fb_avrage(float *); //将平均成绩放在文件的最后面//建立学生结构体struct stu{char num[N];char name[M];int ch_ji[L];struct stu *next;};//建立一个链表,存放学生结构体的指针struct s{struct stu *p;struct s *ps;};void main(){int i,n,x=1,k=0;float a[L]={0};struct stu *head=NULL;struct s *shead=NULL;char ch;while(x){ system("cls");printf("******************************************************************* ************\n");printf(" 0---退出系统 1---录入数据\n");printf(" 2---保存文件 3---按成绩排序 \n");printf(" 4---查看信息 5---按学号排序 \n");printf(" 6---统计人数 7---按条件筛选 \n");printf(" 8---查询信息 9---显示筛选结果 \n");printf(" 10---插入数据 11---保存筛选结果 \n");printf(" 12---删除数据 13---计算平均成绩 \n");printf(" 14---修改数据 15---保存平均成绩 \n");printf(" 16---按条件统计人数\n");printf("******************************************************************* ************\n");scanf("%d",&n);getchar();//有啥作用switch(n){case 0:x=0;break;case 1:head=scanf_();break;case 2:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}elsefprint_(head);break;case 3:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{head=ch_ji_paixu(head);break;}case 4:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}elseprint_(head);break;case 5:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{head=num_paixu(head);printf("是否显示排序结果 Y/N ?");ch=getchar();getchar();if(ch=='y'||ch=='Y'){printf("\n");print_(head);}}case 6:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{k=to_ji(head);printf("总共有%3d 名学生",k);getchar();break;}case 7:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{shead=shaixuan(head);if(shead!=NULL&&shead->ps!=NULL){printf("是否显示筛选结果 Y/N ?");ch=getchar();if(ch=='y'||ch=='Y'){printf("\n");shuchu_shai(shead);getchar();}}break;}case 8:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();}else{chaxun(head);getchar();break;}case 9:if(head==NULL||head->next==NULL) {printf("请先录入学生的数据!");getchar();break;}else{printf("\n");shuchu_shai(shead);getchar();break;}case 10:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}elsehead=charu(head);break;case 11:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{fb_shu_shai(shead);getchar();break;}case 12:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{head=shanchu(head);break;}case 13:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{avrage(head,a);printf("平均值计算成功!\n是否显示平均成绩 Y/N ?");ch=getchar();if(ch=='y'||ch=='Y'){printf("\n 语文数学英语总成绩\n");printf("%-8.2f%-8.2f%-8.2f%-8.2f",a[0],a[1],a[2],a[L-1]);getchar();}break;}case 14:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{xiugai(head);break;}case 15:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{fb_avrage(a);printf("平均值保存成功!");getchar();break;}case 16:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{k=t_ji_tj(head);if(k>0){printf("符合条件的有%3d 名学生!",k);getchar();}else if(k==0){printf("没有符合条件的学生!");getchar();}else if(k==-2)getchar();break;}default :printf("输入有误,请重新输入!");getchar();break;}}}//输出单个的学生数据void printf_(struct stu *p0){int i;printf("学号:");puts(p0->num);printf("姓名:");puts(p0->name);printf("语文数学英语总成绩\n");for(i=0;i<L;i++)printf("%-8d",p0->ch_ji[i]);printf("\n");}//接收单个的学生数据,返回指针,struct stu * scanf1_(){int i,sum=0;struct stu *p0;p0=(struct stu *)malloc(sizeof(struct stu));printf("请输入学生的学号:");gets(p0->num);printf("请输入学生的姓名:");gets(p0->name);printf("请输入学生的三科成绩(语文、数学、英语):");for(i=0;i<L-1;i++){scanf("%d",&p0->ch_ji[i]);sum+=p0->ch_ji[i];}getchar();p0->ch_ji[L-1]=sum;return p0;}//得到学生的数据,并放入到链表中struct stu * scanf_(){struct stu *p1,*p2,*head;int i,sum=0,n=0;printf("注意:当学生学号为 0 时输入结束\n\n");p1=(struct stu *)malloc(sizeof(struct stu)); /*得到学生信息*/ head=p2=p1;do{ printf("请输入学生的学号:");gets(p1->num);if(strcmp(p1->num,"0")==0)break;printf("请输入学生的姓名:");gets(p1->name);printf("请输入学生的三科成绩(语文、数学、英语):");for(i=0;i<L-1;i++){scanf("%d",&p1->ch_ji[i]);sum+=p1->ch_ji[i];}getchar();printf("\n");p1->ch_ji[L-1]=sum;sum=0;p1=(struct stu *)malloc(sizeof(struct stu));p2->next=p1;p2=p1;n++;}while(1);p1->next=NULL;printf("成绩输入结束!\n");getchar();/*学生的数据被放在链表中*/return head;}/*输出链表中的学生信息*/void print_(struct stu *head){int i;struct stu *p1,*p2;p1=p2=head;while(p1->next!=NULL){printf("学号: ");puts(p1->num);printf("姓名: ");puts(p1->name);printf("语文数学英语总成绩\n");for(i=0;i<L;i++)printf("%-8d",p1->ch_ji[i]);printf("\n");p1=p2->next;p2=p1;}getchar();}/*用链表给学生排序*/struct stu *num_paixu(struct stu *head){struct stu *p1,*p2,*p3,*p4,*p5,*p6,*p7;int x=1;for(p1=head;p1->next!=NULL;p4=p1,p1=p1->next){p3=p1;for(p2=p1->next,p5=p7=p2;p2->next!=NULL;p7=p2,p2=p2->next){if(strcmp(p3->num,p2->num)>0){p3=p2;p5=p7;}}if(p3!=p1){if(x&&p1==head){p6=p1->next;p1->next=p3->next;p3->next=p6;p5->next=p1;head=p3;p1=p3;x=0;}else{p6=p1->next;p1->next=p3->next;p3->next=p6;p4->next=p3;p5->next=p1;p1=p3;}}printf("排序成功!\n");return head;}//根据学生的学号查询学生的信息,并把学生的数据输出void chaxun(struct stu *head){char a[N];struct stu *p1;printf("请输入要查询的学号:");gets(a);p1=head;while(p1->next!=NULL){if(strcmp(p1->num,a)==0)break;p1=p1->next;}if(p1->next==NULL)printf("没有找到学号为 %s 的学生!\n",a);else{printf("要查询的学生信息如下:\n\n");printf_(p1);}}//将学生的数据插入到顺序排放的链表中,并且插入后也是顺序排放的。

C语言学生管理系统(链表)

C语言学生管理系统(链表)

学生管理系统#define_CRT_SECURE_NO_WARNINGS#include〈stdio。

h〉#include<stdlib。

h〉#include〈string.h〉void AppendNode(long long studentID,char studentName[10],char studentSex[4],int score[4]);//添加数据void DisplayNode(struct link*head);//显示数据void InsertNode(long long studentID,char studentName[10],char studentSex[4],int score[4]);//插入一条数据;按总分的从大到小排序void InsertNodeNumber(long long studentID,char studentName [10],char studentSex[4],int score[4]);//按学号的从小到大排序void NumberSorting(int flag);//按从大到小对数据进行排序;1、对总分进行排序,2、对学号进行排序void DeleteNodeID();//输入学号删除void DeleteNodeName();//输入学号删除void DeleteMemory(struct link*head);//删除聊表所占用的内存;void Save();//保存数据void Open();//打开数据void FindID();//按学号查找学生void FindName();//按姓名查找学生;void Menu();typedef struct student{long long studentID;char studentName[10];char studentSex[4];int score[4];}STU;struct link{STU student;struct link*next;};struct link*head=NULL;//保存输入的学生信息数据struct link*head1=NULL;//保存排序后的学生信息数据int main(){long long studentID;char studentName[10];char studentSex[4];int score[4];//定义要输入学生信息的变量;char c;int menu;//保存要进行的选项;Open();while(1){system(”pause”);Menu();printf(”请输入要进行的操作:");scanf("%d”,&menu);switch(menu){case0:exit(0);break;case1:printf(”请输入Y或y来添加数据\n”);scanf(” %c”,&c);while(c==’y’||c=='Y’){printf("请输入学生学号:");scanf("%lld”,&studentID);printf("请输入学生姓名:”);scanf(”%s”,&studentName);printf(”请输入学生性别:");scanf("%s",&studentSex);int i=0;printf("请分别输入学生四门课的成绩:");for(i=0;i〈4;i++){scanf(”%d”,&score[i]);}AppendNode(studentID,studentName,studentSex, score);printf(”请输入Y或y来添加数据\n”);scanf(”%c",&c);}DisplayNode(head);break;case2:FindID();break;case3:FindName();break;case4:DeleteNodeID();break;case5:DeleteNodeName();case6:NumberSorting(1);DeleteMemory(head1);head1=NULL;break;case7:NumberSorting(2);DeleteMemory(head1);head1=NULL;break;default:printf("输入有误!请重新输入”);}}Save();DeleteMemory(head);DeleteMemory(head1);system("pause”);}void AppendNode(long long studentID,char studentName[10],char studentSex[4],int score[4]){struct link*p=NULL,*pr=head;p=(struct link*)malloc(sizeof(struct link));if(p==NULL){printf("申请内存失败");return;}if(head==NULL){head=p;}else{while(pr—>next!=NULL){pr=pr—〉next;}pr->next=p;}p->student.studentID=studentID;strcpy(p—>student.studentName,studentName);strcpy(p->student.studentSex,studentSex);p-〉student.score[0]=score[0];p—〉student。

学生信息管理系统(链表)

学生信息管理系统(链表)

#include <stdio.h>#include <string.h>#include <malloc.h>struct shengri{int year;int month;int day;};struct student{char name[40];char sex[5];char sno[20];char telephone[20];char sid[40];struct shengri birth;int address[200];};struct student *stu=NULL;int current=0;int total=0;void insert(){if(stu==NULL)stu=(struct student *)malloc(total*sizeof(struct student));if(current>=total){printf("对不起,由于人数已满,不能继续录入新学生信息\n");return;}printf("请输入学生姓名: ");scanf("%s",stu[current].name);printf("请输入学生性别: ");scanf("%s",stu[current].sex);printf("请输入学生学号: ");scanf("%s",stu[current].sno);printf("请输入学生电话号码: ");scanf("%s",stu[current].telephone);printf("请输入学生身份证号码: ");scanf("%s",stu[current].sid);printf("请输入学生出生日期(年-月-日): ");scanf(" %d-%d-%d",&stu[current].birth.year,&stu[current].birth.month,&stu[current].birth.d ay);printf("请输入学生家庭地址: ");scanf("%s",stu[current].address);current++;return;}void query(){char name[40];char xuehao[40];int i,item,flag;printf("\n");printf("1.按学号查询\n");printf("2.按姓名查询\n");printf("3.退出本菜单\n");printf("\n");while(1){printf("\n");printf("请选择子菜单编号:");scanf("%d",&item);flag=0;switch(item){case 1:printf("请输入要查询的学生的学号:");scanf("%s",xuehao);for(i=0;i<current;i++)if(strcmp(stu[i].sno,xuehao)==0){flag=1;printf("学生信息如下\n");printf("姓名: %s\n",stu[i].name);printf("性别: %s\n",stu[i].sex);printf("学号: %s\n",stu[i].sno);printf("电话号码: %s\n",stu[i].telephone);printf("身份证号: %s\n",stu[i].sid);printf("出生日期: %d-%d-%d\n",stu[i].birth.year,stu[i].birth.month,stu[i].birth.day);printf("家庭地址: %s\n",stu[i].address);return;}if(flag==0)printf("\n");printf(" 警告:学号为%s的学生不存在",xuehao);break;break;case 2:printf("请输入要查询的学生的姓名:");scanf("%s",name);for(i=0;i<current;i++)if(strcmp(stu[i].name,name)==0){flag=1;printf("学生信息如下\n");printf("姓名: %s\n",stu[i].name);printf("性别: %s\n",stu[i].sex);printf("学号: %s\n",stu[i].sno);printf("电话号码: %s\n",stu[i].telephone);printf("身份证号: %s\n",stu[i].sid);printf("出生日期: %d-%d-%d\n",stu[i].birth.year,stu[i].birth.month,stu[i].birth.day);printf("家庭地址: %s\n",stu[i].address);return;}if(flag==0)printf("\n");printf(" 警告:姓名为%s学生不存在",name);break;case 3:return;default:printf("非法输入,请在1-3之间选择\n");}}}void update(){char name[40];int i;printf("请输入要修改的学生姓名: ");scanf("%s",name);for(i=0;i< current;i++){if(strcmp(stu[i].name,name)==0){printf("请输入修改后的学生姓名: ");scanf("%s",stu[i].name);printf("\n");printf("修改后前的学生性别: ");scanf("%s",stu[i].sex);printf("\n");printf("请输入修改后的学生性别: ");scanf("%s",stu[i].sex);printf("\n");printf("修改前的学生学号为: ");printf("%s",stu[i].sno);printf("\n");printf("请输入修改后的学生学号: ");scanf("%s",stu[i].sno);printf("\n");printf("修改前的学生电话号码为: ");printf("%s",stu[i].telephone);printf("\n");printf("请输入修改后的学生电话号码: ");scanf("%s",stu[i].telephone);printf("\n");printf("修改前的学生身份证号为: ");printf("%s",stu[i].sid);printf("\n");printf("请输入修改后的学生身份证号: ");scanf("%s",stu[i].sid);printf("\n");printf("修改前的学生出生日期,格式(年-月-日):");printf("%d-%d-%d",stu[i].birth.year,stu[i].birth.month,stu[i].birth.day);printf("\n");printf("请输入修改后的学生出生日期,格式(年-月-日):");scanf("%d-%d-%d",&stu[i].birth.year,&stu[i].birth.month,&stu[i].birth.day);printf("\n");printf("修改前的家庭住址为: ");printf("%s",stu[i].address);printf("\n");printf("请输入修改后的家庭地址: ");scanf("%s",stu[i].address);return;}}printf(" 该学生不存在,请重新选择\n");return;}void deiete(){char name[40];int i,k;char a;printf("请输入要删除的学生姓名: ");scanf("%s",name);printf("\n");for(i=0;i< current;i++){if(strcmp(stu[i].name,name)==0){printf("要删除的学生姓名为:%s\n",stu[i].name);printf("\n");printf("你确定要删除吗?继续请按'y'或'Y',放弃请按'n'或'N'\n");printf("\n");printf("请选择:");scanf("%s",&a);if (a=='y'||a=='Y'){for(k=i;k<current;k++)strcpy(stu[k].name,stu[k+1].name);break;}if(a=='n'||a=='N'){printf("放弃删除!");return;}printf("非法输入");return;}}if(i==current)printf("警告:姓名为%s的学生不存在\n\n",name);else{printf("该学生信息已成功删除!\n");current--;}return;}void list(){int i;printf("一共有%d个学生信息\n",current);printf("\n");printf("学生信息列表为:\n");printf("\n");for(i=0;i<current;i++){printf("第%d个学生信息如下:\n",i+1);printf(" 姓名: %s\n",stu[i].name);printf(" 性别: %s\n",stu[i].sex);printf(" 学号: %s\n",stu[i].sno);printf(" 电话号码: %s\n",stu[i].telephone);printf(" 身份证号码: %s\n",stu[i].sid);printf("出生日期:%d-%d-%d\n",stu[i].birth.year,stu[i].birth.month,stu[i].birth.day);printf(" 家庭地址:%s\n",stu[i].address);printf("\n");}return;}void save(){int count;FILE*fs;fs=fopen("studentdata.dat","wb");if(fs==NULL){printf("不能打开文件\n");return;}count=fwrite(stu,sizeof(struct student),current,fs);fclose(fs);if(count!=current){printf("文件保存失败\n");return;}printf("文件保存成功!\n");return;}void load(){FILE *fs;int count=0;int succ=0;fs=fopen("studentdata.dat","rb");if(fs==NULL){printf("不能打开文件!\n");return;}succ=fseek(fs,0,2);if(succ!=0){printf("文件操作失败!\n");return;}count=ftell(fs);fseek(fs,0,0);current=count/sizeof(struct student);stu=(struct student *)malloc(total*sizeof(struct student));count=fread(stu,sizeof(struct student),current,fs);fclose(fs);if(count!=current){printf("读取文件失败\n");return;}printf("读取文件成功\n");return;}void main(){int choice;printf(" \n\t\t 尊敬的用户您好,欢迎使用学生信息管理系统\n");printf("\n 1.进入系统后,先按“7”加载学生信息,再进行查询;\n");printf("\n 2.按照菜单提示输入数字代号;\n");printf("\n 3.增加学生信息后,切记保存按“6”;\n");printf("\n 4.谢谢您的使用!\n");printf("\n");printf("\n");printf("\n\n\t *****学****生****信****息****管****理****系****统*****\n");printf("\n");printf("\n");printf(" 主编:电子131姜增浩\n");printf("\n");printf("\n");printf("请您输入要录入的学生总人数:");scanf("%d",&total);while(1){printf("--------------------------------------------------------------------------------");printf(" ----------------------------");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(" 8:--退出程序-- \n");printf("--------------------------------------------------------------------------------\n");printf("\n\n");printf(" 请选择:");scanf("%d",&choice);printf("\n\n");switch(choice){case 1:insert();break;case 2:query();break;case 3:update();break;case 4:deiete();break;case 5:list();break;case 6:save();break;case 7:load();break;case 8:return;default:printf("非法选择请重新选择");}}}。

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

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

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

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

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

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

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

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

链表实现学生信息菜单管理系统-标准化文件发布号:(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;}}}。

学生管理系统链表版

学生管理系统链表版

// 347434.cpp : 定义控制台应用程序的入口点。

//#include "stdafx.h"#include<stdio.h>#include<conio.h>#include<stdlib.h>#include<string.h>void MAIN() //系统的功能菜单{printf("\n\n\n\n\n");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(" * 8.密码修改* \n");printf(" * 9.退出* \n");printf( " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf(" 版权所有,翻版必究,copyright@薛诚\n\n");}//--------------------------------------------------------------------------------------------------------------------------------------------struct student //定义结构体{char num[5];char name[20];int score;struct student *next;};//--------------------------------------------------------------------------------------------------------------------------------------------struct student *createlist() //创建链表的头指针{struct student *head;head = (struct student *) malloc(sizeof(struct student));head->next = NULL;return head;}//--------------------------------------------------------------------------------------------------------------------------------------------int SCANF(struct student * head,struct student * newnode) /*输入学生信息子函数并在此做出异常输入情况的判断*/{int LENTH; //LENTH为输入的学生学号的长度struct student * p;p=head->next;printf ("请输入学生学号:\n ");scanf ("%s",newnode->num);while(p) //第一种情况,输入的学号在系统中已经存在{if (strcmp(p->num,newnode->num)==0){printf("您输入的学号在该系统中已经存在,请按任意键重新输入!!\n");getch();return 1;}else{p=p->next;}}LENTH=strlen(newnode->num); //以下第二种情况,输入的学号位数不是4位if(LENTH!=4){printf("您输入的学生学号必须为4位请按任意键重新输入!!\n\n\n");getch();return 1; //返回值为真,方便下面的调用}printf("请输入学生姓名:\n");scanf ("%s",newnode->name);printf("请输入学生成绩:\n");scanf ("%d",&newnode->score);return 0; //返回值为假}//--------------------------------------------------------------------------------------------------------------------------------------------void Insert(struct student * head, struct student * newnode) /*将学生信息按照学号由高到低排序并插入到链表中*/{struct student * pre = head; //pre前一个节点node后一个把newnode插入struct student * node = pre->next;while (node != NULL){if (strcmp(node->num, newnode->num) < 0) //按学号由低到高插入{pre = node;node = node->next;}else{break;}}pre->next = newnode; //找到了结点的位置将结点插入到链表中newnode->next = node;}//--------------------------------------------------------------------------------------------------------------------------------------------int ADD(struct student *head) /* 添加学生信息*/{struct student* p;p=(struct student *) malloc(sizeof(struct student));while(SCANF(head,p)) //异常学号输入情况的处理{system("cls");}struct student *p1 = head;struct student *p2 = p1->next;Insert(head,p);printf ("如果需要继续输入请按y,返回主菜单请按其它任意键\n");char i;i = getch();if ( i=='y' ){system ("cls");ADD(head);}return 0;}//--------------------------------------------------------------------------------------------------------------------------------------------//--------------------------------------------------------------------------------------------------------------------------------------------void DELETE(struct student *head) /* 删除学生信息*/{struct student *p1,*p2; /*p1为查找到要删除的结点指针,p2为其前驱指针*/char s[256];struct student *p;printf("学生信息如下:\n\n");for(p=head->next;p;p=p->next) /*辅助输出学生信息*/{printf(" |学号:%8s|姓名:%8s| 成绩:%6d|\n", p->num,p->name,p->score);}printf("请输入要删除的学号Please enter the deleted num: \n");printf("如果要删除全部学生信息,请按0000\n");scanf("%s",s);p1=head->next;p2=head;if(strcmp(s,"0000")!=0){while( p1 != NULL){if(strcmp(p1->num,s)){p2=p1;/*p2为其前驱指针*/p1=p1->next;}else{break;}}if(p1!=NULL){p2->next=p1->next;printf("您输入的学生删除成功@@@@\n请按任意键返回主菜单\n");getch();free((void *)p1);}if(p1==NULL){printf("\n没有该学生There is no num %s student on the list.\n",s);printf("请按任意键返回主菜单重新选择\n");getch();}}if(strcmp(s,"0000")==0){head->next=NULL;printf("全部学生信息删除成功@@@@\n");printf("请按任意键返回主菜单重新选择\n");getch();}}//--------------------------------------------------------------------------------------------------------------------------------------------void MODIFY(struct student *head) /* 修改学生信息*/{char num[256];printf("请输入要修改的学生的学号:\n");scanf ("%s",num);struct student *p1 = head;struct student * p2 = p1->next;while (p2){if (strcmp(p2->num, num) != 0){p1 = p2;p2 = p2->next;}else{break;}}if (!p2){printf("\n没有该学生There is no num %s student on the list.\n",num);getch();}else{printf(" |学号:%8s|姓名:%8s| 成绩:%6d|\n", p2->num,p2->name,p2->score);printf ("请重新输入该学生信息:\n");printf("请输入学生姓名:\n");scanf ("%s",p2->name);printf("请输入学生成绩:\n");scanf ("%d",&p2->score);}}//--------------------------------------------------------------------------------------------------------------------------------------------//--------------------------------------------------------------------------------------------------------------------------------------------void QUERY(struct student *head) /* 查询学生信息,三种方式查询*/{struct student *p;char s[5];char i;printf("请选择查询方式:1,按学号查找;2,按姓名查找;3.按成绩查找\n");i=getch();if(i=='1'){printf("请输入学生学号来查找. Please enter num for searching.\n");scanf("%s",s);printf("您要查询的学生信息如此下:\n");for(p=head;p;p=p->next){if(strcmp(p->num,s)==0 ){printf("| %4s | %4s | %3d |\n", p->num,p->name,p->score);printf("查询完毕,请按任意键返回@@@\n");getch();break;}}if(p==NULL){printf("\n没有该学生There is no num %s student on the list.\n",s);printf("请按任意键返回主菜单重新选择\n");getch();}}int j=0;if(i=='2'){printf("请输入姓名来查找. Please enter name for searching.\n");scanf("%s",s);printf("您要查询的学生信息如此下:\n");for(p=head;p;p=p->next){if(strcmp(p->name,s)==0 ){printf("| %4s | %4s | %3d |\n", p->num,p->name,p->score);j++;}}if((p==NULL)&&(j==0)){printf("\n没有该学生There is no name %s student on the list.\n",s);getch();}if(p==NULL){printf("查询完毕,请按任意键返回@@@\n");getch();}}int y=0;if(i=='3'){ int SCORE;printf("请输入成绩来查找. Please enter score for searching.\n");scanf("%d",&SCORE);printf("您要查询的学生信息如此下:\n");for(p=head;p;p=p->next){if(p->score==SCORE){printf("| %4s | %4s | %3d |\n", p->num,p->name,p->score);y++;}}if((p==NULL)&&(y==0)){printf("\n没有对应该成绩的学生\n");getch();}if(p==NULL){printf("查询完毕,请按任意键返回@@@\n");getch();}}}//--------------------------------------------------------------------------------------------------------------------------------------------void PRINT(struct student *head) /* 打印全部学生信息*/{float average=0.00000000;struct student * p;int ITOTAL=1;p=head->next;printf(" 学生信息如下\n");printf("\n*******************************STUDENTLIST************************************\n");printf("-------------------------------------------------------------------------------\n");while(p){printf("| %d | 学号:%8s | 姓名:%8s | 成绩:%6d |\n",ITOTAL++, p->num,p->name,p->score);average=average+p->score;p=p->next;}printf("-------------------------------------------------------------------------------\n");printf("**************************************END**************************************\n\n");if(ITOTAL!=1){printf("学生总人数为:%d\n",ITOTAL-1);average=average/(ITOTAL-1);printf("学生平均成绩为:%f\n",average);}if(ITOTAL==1){printf("学生人数为0,不存在平均成绩\n");}printf("请按数字键1系统将按成绩由高到低打印学生信息\n");char I;I=getch();if(I=='1'){int n=ITOTAL-1; // n为学生总人数struct student *p1,*p2;struct student stu[256],stu1;int i,j;p1=head;p2=p1->next;int X=0;for(i=0;p2!=NULL;i++){strcpy(stu[i].num,p2->num);strcpy(stu[i].name,p2->name);stu[i].score=p2->score;X++;p1=p2;p2=p2->next;}for(j=0;j<X-1;j++)for(i=0;i<X-1-j;i++)if(stu[i].score>stu[i+1].score){stu1=stu[i];stu[i]=stu[i+1];stu[i+1]=stu1;}for(i=n-1;i>=0;i--){printf("学号姓名成绩\n");printf("%5s%5s%5d\n",stu[i].num,stu[i].name,stu[i].score);}}printf("请按任意键返回主菜单重新选择\n");getch();}//--------------------------------------------------------------------------------------------------------------------------------------------FILE *MyOpenFile(char *fname,char s[5]) /* 打开文件子函数并返回文件头指针*/{FILE *fp;fp=fopen(fname,s);if(fp==NULL){printf("cannot open file");return NULL;}return fp;}//--------------------------------------------------------------------------------------------------------------------------------------------void SA VE(struct student *head) /* 保存学生信息*/{char i;FILE *fp;printf("请选择存储方式:1,文本文件格式;2,二进制文件格式\n");i=getch();if(i=='1'){printf("请输入你想存储的路径及文件名\n");char fname[256];scanf("%s",fname);fp=MyOpenFile(fname,"w");struct student *p;p =head->next;while(p!=NULL){fprintf(fp,"%s %s %d\n", p->num,p->name,p->score); /*把学生信息写入文本*/p=p->next;}fclose(fp);printf("文本格式文件保存成功\n\n请按任意键返回主菜单\n");getch();}if(i=='2'){printf("请输入你想存储的路径及文件名\n");char fname[256];scanf("%s",fname);fp=MyOpenFile(fname,"wb");struct student *p;p =head->next;while(p!=NULL){fwrite(p,sizeof(struct student),1,fp); /*把学生信息写入二进制文件*/p=p->next;}fclose(fp);printf("二进制文件保存成功\n\n请按任意键返回主菜单\n");getch();}if((i!='1')&&(i!='2')){printf("\n您输入查询方式有误,请按任意键返回主菜单重新选择\n");getch();}}//--------------------------------------------------------------------------------------------------------------------------------------------void LOAD(struct student *head) /* 导出已保存学生信息*/{FILE *fp;int i;printf("请选择导出方式:1,文本文件格式;2,二进制文件格式\n");i=getch();if(i=='1'){printf("请输入你想读取的路径及文件名\n");char fname[256];scanf("%s",fname);fp=MyOpenFile(fname,"r");struct student *p;while(1){if (feof(fp)) break; //未到文件结尾p = (struct student *) malloc(sizeof(struct student ));fscanf(fp, "%s%s%d\n",p->num, p->name, &(p->score));Insert(head, p);}fclose(fp);printf("文本文件导出成功\n");getch();}if(i=='2'){printf("请输入你想存储的路径及文件名\n");char fname[256];scanf("%s",fname);fp=MyOpenFile(fname,"rb");struct student *p;while(1){p = (struct student *) malloc(sizeof(struct student ));fread(p,sizeof(struct student),1,fp);if (feof(fp)) break; //防止出现乱码Insert(head, p);}fclose(fp);printf("二进制文件导出成功\n");getch();}if((i!='1')&&(i!='2')){printf("\n您输入文件导出方式有误,请按任意键返回主菜单重新选择\n");getch();}}//--------------------------------------------------------------------------------------------------------------------------------------------void EXIT() /*系统退出*/{}int KEY() /*登录系统加密*/{char b[50];void READ(char b[50]); //把修改过的密码读取出来READ(b);int j;char s[50];printf("\n\n\n\n\n\n\n\n\n\n\t\t\t\t请输入登陆密码:\n");printf("\t\t\t\t ");int i=0;while((i>=0)&&(s[i++]=getch())!=13) /*13是回车键的ASCII*/{if(s[i-1]=='\b') /*判断删除键'\b为删除键'*/ {printf("%c%c%c",'\b','\0','\b');i=i-2;}elseprintf("*");}s[i-1]='\0';if(strcmp(s,b)==0){printf("\n\t 密码输入成功, 系统正在登陆……请按任意键进入主界面");getch();system("cls");return 0;}else{printf("\t");printf("\n\t\t 密码输入错误,请按任意键返回重新输入\n");getch();system("cls"); return 1;}}void READ(char b[50]){FILE *MyOpenFile(char *fname,char s[100]);FILE *fp;char fname[256]="d:\\3.txt";fp=MyOpenFile(fname,"r");fread(b,sizeof(struct student),1,fp);b[5]='\0';fclose(fp);}void CHANGEKEY(){FILE *MyOpenFile(char *fname,char s[256]);FILE *fp;char fname[256]="d:\\3.txt";char b[50];fp=MyOpenFile(fname,"w");printf("请输入新的密码(密码为5位):");scanf("%s",b);printf("\n\n密码修改成功\n");fwrite(b,sizeof(struct student),1,fp); //将修改的密码写入指定文件getch();fclose(fp);}void main(){struct student *head;head=createlist();int m=1;int N='0';while(KEY()){system("cls");}while(m){MAIN();printf(" 请输入你想选择的功能序号:\n\n");N=getche();printf("\n");switch(N){case '1': system("cls"); ADD(head); break;case '2': system("cls"); DELETE(head); break;case '3': system("cls"); QUERY(head); break;case '4': system("cls"); MODIFY(head); break;case '5': system("cls"); PRINT(head); break;case '6': system("cls"); LOAD(head); break;case '7': system("cls"); SA VE(head); break;case '8': system("cls"); CHANGEKEY(); break;case '9': system("cls"); EXIT(); m=0; break;default: printf("error\n");break;}system("cls");}}。

链表和C语言—学生信息管理系统

链表和C语言—学生信息管理系统
{
int cl;
Technode *tmp;
printf("输入要查找的班级: ");
scanf("%d", &cl);
printf("\n序号\t姓名\t密码\t所任班级\n");
for(tmp = head;tmp != NULL;tmp = tmp->next)
{
if(tmp->data.clas == cl)
if(i >= 1 && i <= 12)
{
j = 1;
break;
}
else
{
j = 0;
printf("输入错误\n");ห้องสมุดไป่ตู้
break;
}
}
while(j == 1)
{
switch(i)
{
case 1:debug_prt1(L1);ad_main();break;
case 2:ad_cz(L1);break;
while(i < 3)
{
if(i > 0)
{
printf("请重新输入\n");
}
printf("请输入用户名: ");
scanf("%s",str);
getchar();
printf("请输入密码: ");
scanf("%s",str1);
getchar();
if((strcmp(str,"admin") == 0)&&(strcmp(str1,"admin") == 0))

链表实现学生管理系统

链表实现学生管理系统

链表实现学⽣管理系统makefilemain : main.o stu.o llist.ogcc -Wall -o $@ $^clean :rm -rf main *.o头⽂件llist.h#ifndef __LLIST_H#define __LLIST_Henum a{HEADINSERT,TAILINSERT};typedef void (llist_print)(const void *data);typedef int (llist_cmp)(const void *data, const void *cp);typedef void LLIST;LLIST *llist_handler(int size);int llist_insert(LLIST *h, const void *data, int mode);int llist_delect(LLIST *h, const void *data, llist_cmp cmp);void *llist_find(LLIST *h, const void *data, llist_cmp cmp);void *llist_display(LLIST *h, llist_print print);void *llist_destroy(LLIST *h);int llist_fetch(LLIST *handler, void *b_data, llist_cmp cmp, void *save);int llist_output(LLIST *h, void *save);#endifstu.h#ifndef __STU_H#define __STU_H#include "llist.h"struct stu{int id;char name[20];long int tel;};void insert_data(LLIST *handler);int delect_data(LLIST *handler);int fetch_data(LLIST *handler);int find_data(LLIST *handler);void display_data(LLIST *handler);void sort_data(LLIST *handler);int save_data(LLIST *handler);int read_data(LLIST *handler);#endifllist.c#include <stdio.h>#include <stdlib.h>#include <string.h>#include "llist.h"struct llist_node{struct llist_node *prev;struct llist_node *next;char data[0];};struct head_node{int size;struct llist_node node;};LLIST *llist_handler(int size){struct head_node *handler = NULL;handler = malloc(sizeof(LLIST));if(handler == NULL)return NULL;handler->size = size;handler->node.prev = handler->node.next = &handler->node; return handler;}int llist_insert(LLIST *h, const void *data, int mode){struct head_node *handler = h;struct llist_node *newnode = NULL;struct llist_node *p = &handler->node;newnode = malloc(sizeof(struct llist_node) + handler->size); if(newnode == NULL)return -1;memcpy(newnode->data, data, handler->size);switch(mode){case HEADINSERT : break;case TAILINSERT : p = p->prev;break;default : free(newnode);break;}newnode->next = p->next;newnode->prev = p->next->prev;newnode->prev->next = newnode;newnode->next->prev = newnode;return0;}struct llist_node *_find(LLIST *h, const void *data, llist_cmp cmp){struct head_node *handler = h;struct llist_node *cur = NULL;for(cur = handler->node.next; cur != &handler->node; cur = cur->next) {if(cmp(cur->data, data))return cur;}return NULL;}void *llist_find(LLIST *h, const void *data, llist_cmp cmp){struct head_node *handler = h;struct llist_node *find = NULL;find = _find(handler, data, cmp);if(NULL == find)return NULL;return find->data;}int llist_delect(LLIST *h, const void *data, llist_cmp cmp){struct head_node *handler = h;struct llist_node *find = NULL;find = _find(handler, data, cmp);if(NULL == find)return -1;find->prev->next = find->next;find->next->prev = find->prev;free(find);}void *llist_display(LLIST *h, llist_print print){struct head_node *handler = h;struct llist_node *cur = handler->node.next;while(cur != &handler->node){print(cur->data);cur = cur->next;}}void *llist_destroy(LLIST *h){struct head_node *handler = h;struct llist_node *p = NULL;struct llist_node *cur = NULL;for(p = handler->node.next; p != &handler->node; p = p->next) {cur = p;p->next->prev = p->prev;p->prev->next = p->next;free(p);p = cur;}free(handler);}int llist_fetch(LLIST *h, void *b_data, llist_cmp cmp, void *save) {struct head_node *handler = h;struct llist_node *cur = NULL;struct llist_node *find = NULL;find = _find(handler, b_data, cmp);if(NULL == find)return -1;memcpy(save, find->data, handler->size);find->next->prev = find->prev;find->prev->next = find->next;free(find);}int llist_output(LLIST *h, void *save){struct head_node *handler = h;struct llist_node *cur = handler->node.next;if(cur == &handler->node)return -1;cur->next->prev = cur->prev;cur->prev->next = cur->next;memcpy(save, cur->data, handler->size);free(cur);}stu.c#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include "stu.h"static int a, ret, b, bnum, num;static char name[20];static char bname[20];static long int tel, lbnum, lnum;void print(const void *data) //打印函数{const struct stu *p = data;printf("%d %s %ld\n", p->id, p->name, p->tel);}int id_cmp(const void *data, const void *cp) //id对⽐函数{const struct stu *p = data;const int *cur = cp;return !(p->id - *cur);}int tel_cmp(const void *data, const void *cp){const struct stu *p = data;const long int *cur = cp;return !(p->tel - *cur);}int name_cmp(const void *data, const void *cp) //名字对⽐函数{const struct stu *p = data;const char *cur = cp;return !(strcmp(cur, p->name));}void insert_data(LLIST *handler) //增加数据函数{struct stu data;struct stu *find = NULL;system("clear");printf("请输⼊学号:\n");scanf("%d", &num);find = llist_find(handler, &num, id_cmp);if(find != NULL){printf("该学号已存在,请核对后从新输⼊!\n");sleep(2);return ;}data.id = num;printf("请输⼊学⽣姓名:\n");scanf("%s", name);memcpy(, name, 20);printf("请输⼊学⽣电话:\n");scanf("%ld", &tel);data.tel = tel;ret = llist_insert(handler, &data, HEADINSERT);if(ret < 0)printf("未能成功添加学⽣信息。

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

链表实现学生信息菜单管理
系统
-标准化文件发布号:(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;}}}。

相关文档
最新文档