c语言程序设计报告-链表实现学生信息管理
数据结构 用链表实现学生信息管理系统
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实验名称:链表实现学生信息管理系统实验目的:通过设计链表实现学生信息管理系统,掌握链表的操作方法及其应用。
实验内容:设计一个学生信息结构体,包括学号、姓名、性别、年龄和成绩五个成员变量,并选择链式结构存储这些数据。
实现以下功能:1. 添加学生信息:从键盘输入学号、姓名、性别、年龄和成绩等信息,添加到链表中。
2. 删除学生信息:从链表中删除指定学号的学生信息。
5. 按成绩排序:按学生的成绩从高到低排序,并输出所有学生的信息。
7. 退出程序:退出学生信息管理系统。
实验方法:1. 设计学生信息结构体,定义链表节点结构体,并编写初始化链表和销毁链表的函数。
2. 编写添加学生信息函数,新建链表节点并插入链表末尾。
3. 编写删除学生信息函数,根据学号查找需要删除的节点,先将该节点从链表中删除,再释放节点空间。
4. 编写修改学生信息函数,根据学号查找需要修改的节点,并修改其成员变量。
6. 编写按成绩排序函数,使用冒泡排序法对链表进行排序,并输出所有学生的信息。
7. 编写输出所有学生信息函数,遍历链表并输出每个节点的信息。
8. 完成学生信息管理系统的主函数,实现菜单及相应功能的选择。
实验结果:依次选择菜单中的各个功能,添加、修改、删除、查找、排序和输出学生信息都能实现。
经测试,程序稳定运行,功能正常,符合需求。
本次实验主要让我们掌握了链式结构的概念、链表节点的定义、链表的初始化、插入、查找、删除和销毁链表的操作方法,以及在实际应用中如何使用链表来实现数据管理。
虽然链表操作相对于数组稍微有些繁琐,但其可以灵活处理数据结构的长度变化,具有更高的可扩展性和更好的操作效率,可以更好的适应各种实际需求。
在实验中,还需要注意节点指针的正确使用、各个函数之间的调用关系和输入输出数据格式的合理选择等问题,以保证程序能够正常运行。
同时,还需要保持认真细致的态度,严格按照实验需求和要求来完成每个步骤,以达到更好的实验效果和运行效率。
学生管理系统(链表版)
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);
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;}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
C语言写的学生成绩管理系统(链表)
#include<stdio.h>#include<string.h>#include<stdlib.h>struct stud{long num;char name[20];float sx;float dx;float ts;float dl;float cx;float zf;float pj;};struct studcode{struct stud student;struct studcode *next;};void menu();void input(struct studcode **);void output(struct studcode *);void binsearch(struct studcode *);void insert(struct studcode **);void delet(struct studcode **);void good(struct studcode *);void fail(struct studcode *);void sort(struct studcode *);void back();void main(){char choose;int flag=1;struct studcode *head;head=NULL;printf("请先录入学生成绩信息\n");printf("输入学生学号姓名高数、英语读写、英语听说、计算机导论和程序设计的成绩\n");input(&head);while (flag){system("cls");menu();printf("请选择:");getchar();choose=getchar();switch(choose){case '1':output(head);back();break;case '2':binsearch(head);back();break;case '3':insert(&head);output(head);back();break;case '4':delet(&head);output(head);back();break;case '5':good(head);back();break;case '6':fail(head);back();break;case '7':sort(head);output(head);back();break;case '0':flag=0;printf("\n *** The End! ***\n");printf("\n ####感谢使用,欢迎再次登录,拜拜!####\n");break;default: printf("\n Wrong Selection !(选择错误,请重选)\n");back();}}}void menu(){printf(" \n 学生成绩统计与分析系统\n");printf(" \n 菜单\n\n");printf(" \n 1. 显示所有学生的信息\n");printf(" \n 2. 查找某学号的学生信息\n");printf(" \n 3. 插入某学生的信息 \n");printf(" \n 4. 删除某学号学生的信息\n");printf(" \n 5. 统计各门课程成绩在90分以上学生所占百分比\n");printf(" \n 6. 统计各门课程成绩在60分以下学生所占百分比 \n");printf(" \n 7. 按总分降序排序,依高低排出名次 \n");printf(" \n 0. 退出 \n\n");}void back(){int x;printf("\n");do{printf("按1返回菜单界面:");scanf("%d",&x);}while(x!=1);}void input(struct studcode **headp){struct studcode *p;while(1){p=(struct studcode *)malloc(sizeof(struct studcode));scanf("%ld",&p->student.num);if(p->student.num==0) break;scanf("%s%f%f%f%f%f",&p->,&p->student.sx,&p->student.dx,&p->stu dent.ts,&p->student.dl,&p->student.cx);p->student.zf=p->student.sx+p->student.dx+p->student.ts+p->student.dl+p->st udent.cx;p->student.pj=p->student.zf/5;p->next=*headp;*headp=p;}}void output(struct studcode *head){struct studcode *p;p=head;printf("学号\t姓名\t高数\t读写\t听说\t导论\t程序\t总分\t平均分\n");while(p!=NULL){printf("%-ld\t%-4s\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\ n",p->student.num,p->,p->student.sx,p->student.dx,p->student.ts,p-> student.dl,p->student.cx,p->student.zf,p->student.pj);p=p->next;}printf("\n");}void binsearch(struct studcode *head){struct studcode *p;int k=1;long x;p=head;printf("请输入需要查找的学生的学号:");scanf("%ld",&x);printf("\n");while(p!=NULL){if(p->student.num==x){printf("该学生信息如下:\n");printf("学号\t姓名\t高数\t读写\t听说\t导论\t程序\t总分\t平均分\n");printf("%-ld\t%-4s\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\n",p ->student.num,p->,p->student.sx,p->student.dx,p->student.ts,p->student.dl,p->stude nt.cx,p->student.zf,p->student.pj);k=0;break;}p=p->next;}if(k) printf("没有此学生的信息\n");}void insert(struct studcode **headp){struct studcode *p;p=(struct studcode *)malloc(sizeof (struct studcode));printf("请输入你想插入的学生的信息\n");scanf("%ld%s%f%f%f%f%f",&p->student.num,&p->,&p->student.sx,&p->student.dx,&p->student.ts,&p->student.dl,&p->student.cx);p->student.zf=p->student.sx+p->student.dx+p->student.ts+p->student.dl+p->st udent.cx;p->student.pj=p->student.zf/5;p->next=*headp;*headp=p;printf("*****插入成功*****\n");}void delet(struct studcode **headp){struct studcode *p,*last;long x;p=*headp;printf("请输入你要删除的学生的学号:");scanf("%ld",&x);while(p->student.num!=x&&p->next!=NULL){last=p;p=p->next;}if(p->student.num==x){if(p==*headp)*headp=p->next;elselast->next=p->next;free(p);printf("\n*****删除成功*****\n");}else printf("\n***删除失败,无该学生信息***\n");}void good(struct studcode *head){struct studcode *p;int x1,x2,x3,x4,x5,k;float y1,y2,y3,y4,y5;x1=x2=x3=x4=x5=k=0;p=head;while(p!=NULL){k++;if(p->student.sx>=90) x1++;if(p->student.dx>=90) x2++;if(p->student.ts>=90) x3++;if(p->student.dl>=90) x4++;if(p->student.cx>=90) x5++;p=p->next;}y1=(float)x1/k;y2=(float)x2/k;y3=(float)x3/k;y4=(float)x4/k;y5=(float)x5/k;printf("高数\t读写\t听说\t导论\t程序\n");printf("%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\n",y1,y2,y3,y4,y5); }void fail(struct studcode *head){struct studcode *p;int x1,x2,x3,x4,x5,k;float y1,y2,y3,y4,y5;x1=x2=x3=x4=x5=k=0;p=head;while(p!=NULL){k++;if(p->student.sx<60) x1++;if(p->student.dx<60) x2++;if(p->student.ts<60) x3++;if(p->student.dl<60) x4++;if(p->student.cx<60) x5++;p=p->next;}y1=(float)x1/k;y2=(float)x2/k;y3=(float)x3/k;y4=(float)x4/k;y5=(float)x5/k;printf("高数\t读写\t听说\t导论\t程序\n");printf("%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\n",y1,y2,y3,y4,y5); }void sort(struct studcode *head){struct stud temp;int i,j,n;struct studcode *p,*p1,*p2;n=0;p=head;while(p!=NULL){n++;p=p->next;}for(p1=head,i=0;i<n-1;i++,p1=p1->next)for(p2=p1->next,j=i+1;j<n;j++,p2=p2->next)if(p1->student.zf<p2->student.zf){temp=p2->student;p2->student=p1->student;p1->student=temp;}printf("\n*****排序成功*****\n"); }。
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);}}//将学生的数据插入到顺序排放的链表中,并且插入后也是顺序排放的。
链表实现学生管理系统
链表实现学⽣管理系统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("未能成功添加学⽣信息。
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("非法选择请重新选择");}}}。
数据结构-链表实现学生管理实验报告.
计算机科学与技术系实验报告专业名称计算机科学与技术课程名称《数据结构》项目名称链表实现学生管理班级学号姓名同组人员无实验日期一、实验目的与要求:(简述本次实验要求达到的目的,涉及到的相关知识点,实验的具体要求。
)(一)实验目的:应用链表来实现对数据的操作。
(二)实验要求:用链表实现对数据的,增,删,改,查(三)实验环境:VC++6.0.二、实验内容#include <stdio.h>#include <malloc.h>#include <string.h>#define Error 0#define OK 1typedef struct node{char name[10];char stuno[20];float score;struct node *next;}LinkList;/*置空表*/LinkList *setnull(LinkList *L){L->next = NULL;return L;}/*创建表*/LinkList *createList(){LinkList *L, *S, *H;int i = 1;L = (LinkList *) malloc (sizeof (LinkList));L->next = NULL;H = L;while(i < 5){printf("请输入第 %d 个学生的姓名,学号,成绩\n", i);S = (LinkList *) malloc (sizeof (LinkList));scanf("%s",(S->name));scanf("%s",(S->stuno));scanf("%f",&(S->score));//scanf("%s%s%f",(S->name), (S->stuno), &(S->score));/*gets(S->name);gets(S->stuno);scanf("%f",&S->score);*/S->next = NULL;H->next = S;H = S;i++;}return L;}/*链表的删除*/LinkList *deleteList(LinkList *L, char stuno[]){if(L->next == NULL){printf("此链表已经为空\n");return Error;}while(L->next != NULL){if(strcmp(L->next->stuno, stuno) == 0){L->next = L->next->next;printf("--------------------------------------------------------");printf("\n删除成功\n");printf("--------------------------------------------------------");return L;}elseL = L->next;}printf("--------------------------------------------------------");printf("\n对不起,没有找到你想要删除的学号,删除失败。
链表实现学生信息菜单管理系统
链表实现学生信息菜单管理系统-标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII实验名称:链表实现学生信息菜单管理系统一、实验目的:1、掌握顺序表结构的实现方式;2、掌握顺序表常用算法的实现;3、熟悉利用顺序表解决问题的一般思路;4、参照给定的顺序表的程序样例,验证给出的顺序表的常见算法,领会顺序表结构的优点和不足。
二、实验内容:1、编程完成顺序表的基本操作:建立、删除、查找及显示。
2、按要求完成学生名册管理程序的编写和调试。
三、实验结果:1、创建:2、删除:3、添加:4、退出:四、实验中遇到的问题及解决方法:问题一:地址传递出错解决方案:参考网上资料代码。
问题二:创建时,停止暂停解决方案:输入学号为零时停止输入问题三:创建时需要学号姓名成绩都为零才能停止创建解决方案:占无解决方案五、实验心得体会:链表中指针的使用要注意指针的性质,确保地址正确传递,要改变的值正确改变。
在编程过程中很容易出现地址传递出错的问题,需要有耐心慢慢排查故障,解决故障。
通过本次实验让我明白了链表的操作使用,加深了我对链表的理解,同时也通过不断地练习提高了编程能力,链表的掌握对于这门课程而言十分重要,在今后的学习中,我需要更加努力,才能更好的掌握和使用链表。
源代码:#include <stdlib.h>#include <stdio.h>#define NULL 0#define LEN sizeof(struct student)struct student{int num;char name[20];float score;struct student *next;};int n;struct student *Create(){struct student *head;struct student *p1 = NULL;struct student *p2 = NULL;n = 0;p1 = (struct student *) malloc (LEN);p2 = p1;if(p1==NULL){printf ("\nCann't create it, try it again in a moment!\n");return NULL;}else{head = NULL;printf("请输入第%d个学生学号姓名成绩:\n",n+1);scanf("%d %s %f",&(p1->num),p1->name,&(p1->score));}while(p1->num != 0){n += 1;if(n == 1){head = p1;p2->next = NULL;}else{p2->next = p1;}p2 = p1;p1 = (struct student *) malloc (LEN);printf("请输入第%d个学生学号姓名成绩:\n",n+1);scanf("%d %s %f",&(p1->num),p1->name,&(p1->score));}p2->next = NULL;free(p1);p1 = NULL;return head;}void Print(struct student *head){struct student *p;printf ("\nNow , These %d records are:\n", n);p = head;if(head != NULL){printf("head is %o\n", head);do{printf ("%d\t%s\t%5.1f\n", p->num, p->name, p->score);p = p->next;}while (p != NULL);}}struct student *Del (struct student *head, int num){struct student *p1;struct student *p2;if (head == NULL){printf ("\nList is null!\n");return head;}p1 = head;while (p1->num != num && p1->next != NULL){p2 = p1;p1 = p1->next;}if(p1->num==num){if (p1 == head){head = p1->next;}else{p2->next = p1->next;}free (p1);p1 = NULL;printf ("\ndelete %ld success!\n", num);n -= 1;}else{printf ("\n%ld not been found!\n", num);}return head;}struct student *Insert (struct student *head, int num, struct student *node) {struct student *p1;if (head == NULL){head = node;node->next = NULL;n += 1;return head;}p1 = head;while(p1->num != num && p1->next != NULL){p1 = p1->next;}if (p1->num==num){node->next = p1->next;p1->next = node;n += 1;}else{printf ("\n%ld not been found!\n", num);}return head;}int main(void){struct student *head;struct student *stu;int thenumber;int command,flag=1;while(flag){printf("1、创建管理系统\n2、删除学生信息\n3、添加学生信息\n4、退出\n");printf("当学号姓名成绩都为0时,停止创建\n");printf("输入指令:");scanf("%d",&command);switch(command){case 1:{head = Create();Print(head);break;}case 2:{printf("\nWhich one delete: ");scanf("%d",&thenumber);head = Del(head,thenumber);Print(head);break;}case 3:{stu = (struct student *)malloc(LEN);printf("请输入第%d个学生学号,姓名,成绩:\n",n+1);scanf("%d %s %f",&(stu->num),stu->name,&(stu->score));printf("\n插到哪个学号后面: ");scanf("%d",&thenumber);head = Insert(head,thenumber,stu);Print(head);break;}case 4:flag=0;}}}。
建立学生信息链表c语言
下面是一个示例的C语言代码,展示了如何使用链表来存储学生信息:```c#include <stdio.h>#include <stdlib.h>#include <string.h>// 定义学生结构体typedef struct Student {int id;char name[100];struct Student* next;} Student;// 创建新学生节点Student* createStudent(int id, const char* name) {Student* student = (Student*)malloc(sizeof(Student));student->id = id;strcpy(student->name, name);student->next = NULL;return student;}// 插入学生节点到链表尾部void insertStudent(Student** head, int id, const char* name) {Student* student = createStudent(id, name);if (*head == NULL) {*head = student;} else {Student* current = *head;while (current->next != NULL) {current = current->next;}current->next = student;}}// 打印链表中的学生信息void printStudents(Student* head) {Student* current = head;while (current != NULL) {printf("Student ID: %d, Name: %s\n", current->id, current->name);current = current->next;}}// 释放链表节点的内存void freeStudents(Student* head) {Student* current = head;while (current != NULL) {Student* next = current->next;free(current);current = next;}}int main() {Student* head = NULL;// 插入学生节点insertStudent(&head, 1, "Alice");insertStudent(&head, 2, "Bob");insertStudent(&head, 3, "Charlie");// 打印学生信息printStudents(head);// 释放链表节点的内存freeStudents(head);return 0;}```这个示例代码定义了一个`Student` 结构体,每个结构体包含一个学生的学号`id` 和姓名`name`,以及一个指向下一个学生节点的指针`next`。
链表和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))
c语言学生成绩管理系统(链表版)
#include <stdio。
h〉#include 〈stdlib.h>#include 〈string。
h>#include 〈conio.h〉#include 〈windows.h〉#include 〈ctype。
h〉#define YES 1#define NO 0typedef struct{int num;float math_score;float engl_score;float chin_score;float phy_score;float chem_score;double aver_score;double sum_score;char sex;}StudentDate;//学生基本信息typedef struct student{char name[20];//学生姓名StudentDate one;//学生其他信息int rank;//成绩排名struct student *next;}Student, *List;Student *startCheck(void);//开始检查Student *createListHead(void);//创建链表的头void menu(void);//主菜单void sortList(Student *pHead);//排序链表void readListWithFile(Student *pHead,char *file_name);//从文件中读取数据,并保存在链表中void sorttList(Student *pHead);//排序链表int userChioce(Student *pHead);//用户选择int sortMenu(void);//打印选择菜单void passwordCheck(void);//密码检测void correctWord(void);//修改密码void addStudentInfo(Student *pHead);//向链表的末尾添加数据int scanMenu(void);//浏览菜单void findStudentInfo(Student *pHead);//查找学生信息void delStudentInfo(Student *pHead);//删除某一个学生信息void alterStudentInfo(Student *pHead);//修改学生信息void saveList(Student *pHead);//将链表保存在文件里void printList(Student *pHead);//打印链表void statisStudentInfo(Student *pHead);//查看学生信息int statisMenu(void);//查看菜单void gotoxy(int x, int y);//改变光标位置函数void inputData(Student *pHead,Student *node);//输入信息,并检测是否合法int main(void){Student *pHead;HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);//得到窗口句柄SMALL_RECT rc = { 0, 0, 94 —1,30 - 1 };//{Y位置,X位置,宽,高}SetConsoleWindowInfo(hOut, true,&rc);// 重置窗口位置和大小system("color 5B");//设置控制台颜色pHead = startCheck();//读取信息while (1){if (9 == userChioce(pHead))//按9时退出系统{break;}}return 0;}void menu(void){system(”CLS”);//清屏printf(”\n\n\n\t\t\t\t┌─────────────────┐\n”);printf("\t\t\t\t│学生成绩统计系统│\n”);printf("\t\t\t\t├─────────────────┤\n”);printf(”\t\t\t\t│ 1 增加学生记录│\n”);printf("\t\t\t\t├─────────────────┤\n");printf("\t\t\t\t│ 2 删除学生记录│\n”);printf(”\t\t\t\t├─────────────────┤\n”);printf("\t\t\t\t│ 3 修改学生记录│\n");printf(”\t\t\t\t├─────────────────┤\n”);printf("\t\t\t\t│ 4 查找学生信息│\n”);printf("\t\t\t\t├─────────────────┤\n”);printf(”\t\t\t\t│ 5 统计学生成绩│\n");printf(”\t\t\t\t├─────────────────┤\n”);printf("\t\t\t\t│ 6 查看学生成绩│\n");printf(”\t\t\t\t├─────────────────┤\n”);printf("\t\t\t\t│7 修改登陆密码│\n”);printf(”\t\t\t\t├─────────────────┤\n”);printf("\t\t\t\t│8 关于│\n”);printf("\t\t\t\t├─────────────────┤\n”);printf(”\t\t\t\t│9 退出系统│\n”);printf("\t\t\t\t└─────────────────┘\n”);}void gotoxy(int x, int y)//x为列坐标,y为行坐标{COORD pos = {x,y };HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hOut,pos);}Student *startCheck(void){Student *pHead;FILE *fp1;char password[20]= "123456”;int i;if ((fp1 = fopen("password。
利用单链表实现学生信息管理
}
}
};
int main(int argc, char* argv[])
{
printf("Hello World!\n");
SeqList GIS2010;
int x=1;
while(x!=0){
printf("请输入以下选项:\n");
printf("1:信息浏览\n");
}
void ;
current=head->next;
for(int i=0;i<length&¤t!=NULL;i++){
//如果当前数据的id等于用户输入要删除数据的id,进行删除操作。
if(strcmp(current->id,ID)==0){
#include <iostream.h>
#include <string.h>
struct Student
{
char id[10];
char name[10];
char sex[10];
char grade[10];
char tel[20];
int age;
Student *next;
};
class SeqList
cout<<"AGE="<<endl;
cin>>newStudent.age;
newStudent.next=NULL;
GIS2010.ListInsert(newStudent);
break;
case 3:
链表实现学生信息管理
实验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语言中有关链表及外部文件得内容,设计学生信息管理系统。
具体要求如下:◆建立学生信息,信息至少包括名字、性别、年龄、学号、系别、家庭信息等内容;◆能够提供添加、删除与修改学生信息等功能;◆能将通讯录保存在文件中;◆能够按指定方式输出学生信息.系统功能需求分析:★1、为存储学生信息,需定义一个结构体类型,成员名字、性别、年龄、学号、系别、家庭信息等,并建立链表,定义该结构体类型得指针,用于指向各结点;★ 2、分别建立具有添加、删除、修改、查询等功能得子函数,完成相应功能,对程序实现模块化。
这其中要用到对链表得删除、插入等知识。
删除时用一结构体指针指向链表得第一个结点,检查该节点得值就是否等于输入得要删除得学号,若相等就删除,不相等则后移指针,直至表尾。
插入时也要先找到相应结点,再添加.★3、为实现存储功能,需用到文件得相关函数,打开文件,将添加、修改或删除得信息存入磁盘中。
★4、为以表格得形式输出文件,宏定义格式化输出语句,指定输出学生信息。
二、概要设计系统总体设计框架:对程序进行模块化,建立添加、修改、删除、查找与显示功能得子函数,各子函数中运用链表存储数据。
从主函数开始执行,调用各个子函数,并运用文件相关知识将信息存入磁盘中。
系统功能模块图:三、详细设计主要功能模块得算法设计思路如下:1、查询通讯录信息(void chakan())(1)为开辟一个新单元(2)输入查询关键字:(3)读取保存得文件数据输入ASCLL字符:(4)在链表中寻找相应结点;(5)调用输出函数,输出结点信息.2、添加信息函数(void add())(1)定义指向结构体变量得指针;(2)移动指针,找到插入结点;(3)在要插入得结点输入信息;(4)调用保存函数,打开文件,保存输入信息。
3、删除信息函数(void del())(1)定义指向结构体变量得指针;(2)用指针检验链表中就是否有记录,若没记录,返回主函数;(3)根据要修改得编号查找要删除得结点;(4)修改链表,删除对应结点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言课程设计报告链表实现学生信息管理一.课程设计目标C语言课程设计的目的是通过课程设计的综合训练,培养学生实际分析问题、编程和动手能力,最终目标是通过这种形式,帮助学生系统掌握该门课程的主要内容,更好地完成教学任务。
本课程设计具有如下特点:重点在于C语言的基本特征上,涵盖了C语言的重要基础知识。
结合了实际应用的要求,使课程设计既涵盖知识点,又接近工程实际需要。
通过激发学习兴趣,调动学生主动学习的积极性,并引导他们根据实际编程要求,训练自己实际分析问题的能力以及编程能力,并养成良好的编程习惯。
另外,在实际编程中,为了提高编程质量,希望学生在书写代码时,对空行、空格和注释严格按要求处理,以建立良好的编程风格。
二.设计项目:学生学籍管理该课程设计是设计一个模拟学生信息管理程序,要求使用链表来实现。
它具有浏览、插入、删除、修改等功能,并且能够对数据进行文件存储和读出操作。
主要功能模块:1. 浏览学生信息:显示学生的信息。
2. 插入学生信息:添加学生的信息。
3. 删除学生信息:通过输入学号删除学生的信息。
4. 修改学生信息:通过输入学号修改学生的信息。
5. 保存学生信息:将学生信息保存到文件。
0. 退出系统:结束程序的运行,结束前询问是否保存信息。
三.具体任务由老师提供主菜单程序以及第0、2个模块。
学生在这个信息系统中加入四个模块,即:1. 浏览学生信息3. 删除学生信息4. 修改学生信息5. 保存学生信息四、详细介绍1、浏览学生信息2、插入学生信息3、删除学生信息4、修改学生信息5、信息的写入读出6、学生信息的保存与释放五、课程设计实践小节这是这学期的第一次正式的程序设计,目的是运用链表来实现学生的学籍信息管理。
在学习过程中,我不仅把以前的函数循环搭配使用了起来,也接触到链表这些全新的概念。
链表的使用在今后的程序设计中尤为关键,他可以保存、调用和更改数据,在信息时代的程序设计中很重要。
在这次的程序设计中,老师和同学都是我强大的后盾。
比如之前在switch语句下的break的使用和getchar的重要性,还有在小程序里面的循环,每一步的程序都很重要。
通过这次的程序设计,我了解到我所感兴趣的东西并不是感兴趣就可以掌握的,要经过不断的练习和调试,在一次一次的失败中找到原因,团结周围的所有力量来突破。
最重要的收获其实还是写编码的重要性。
我这边接触过一些华为之类的程序设计员,他们都有c语言设计规范要求,每种固定程序的编写都有固定的格式,不按照格式的都有相应的处罚。
这次的程序设计中我充分的体会到了格式的重要性,我程序的最大的问题就在于switch语句里面格式的不对称导致的出错,最后是老师发现的,这是个极大的问题。
最后在这次的程序设计过程中感谢老师和帮助过我的同学!六、源程序完整清单#include <stdio.h>#include <stdlib.h>#include <string.h>#include <malloc.h>struct node{char number[12];char name[10];char sex[6];char classes[10];char tel[12];struct node *next;};typedef struct node NODE;// 函数的声明void Browse(NODE* head);void Insert(NODE* head);void Delete(NODE* head);void Modify(NODE* head);void WriteInfo(NODE* head);void ReadInfo(NODE* head);void FreeList(NODE* head);void Exit(NODE* head);// 主程序int main(){int choice; // a variable accept the user's choiceNODE *head;head=(NODE *)malloc(sizeof(NODE)); // creat head node head->next=NULL; // install a tailReadInfo(head); // get info from disk file if file existedwhile(1){// 主菜单printf("\n%s"," ***** 学生信息管理系统******\n"" * 1. 浏览学生信息*\n"" * 2. 插入学生信息*\n"" * 3. 删除学生信息*\n"" * 4. 修改学生信息*\n"" * 5. 保存学生信息*\n"" * 0. 退出系统*\n"" *****************************\n"" 请按功能代码选择(0 ~ 5):");scanf("%d",&choice); // number with return char into the IO buttergetchar(); // clear the return char from bufferswitch(choice){case 1:Browse(head);break;case 2:Insert(head);break;case 3:Delete(head);break;case 4:Modify(head);break;case 5:WriteInfo(head);break;case 0:Exit(head);exit(0);default:printf("\n 选择错误,请重新输入!\n");} // end of switch} // end of while(1)return 0;}// 浏览学生信息void Browse(NODE *head){NODE* p=head;if(p->next==NULL){printf("无文件记录!请输入学生信息!\n");return;}p=head->next;printf("number name classes sex tel\n");printf("-------------------------------------------\n");while(p!=NULL){printf("%s %s %s %s %s\n",p->number,p->name,p->classes,p->sex,p->tel);p=p->next;}}void Insert(NODE *head) // 定义插入函数{NODE *t,*p;t=(NODE *)malloc(sizeof(NODE)); // create a new node and pointed by tp=head; // p is to point to the head node, which is passed from main functionprintf("请输入学生学号:\n");scanf("%s",t->number);printf("请输入学生姓名:\n");scanf("%s",t->name);printf("请输入学生性别:\n");scanf("%s",t->sex);printf("请输入学生班级:\n");scanf("%s",t->classes);printf("请输入学生电话:\n");scanf("%s",t->tel);if(p->next==NULL) // 原本无学生记录{p->next=t; // new node connect to head nodet->next=NULL; // install a tail for the new node}else // 原本有学生记录{t->next=p->next; // new node insert to the rear of the head node.p->next=t; // two steps}}void Delete(NODE *head) // 定义删除函数{NODE* p=head,*t=p->next;char num[12];printf("请输入要删除学生的学号:\n");scanf("%s",num);while(t!=NULL){if(strcmp(t->number,num)!=0){t=t->next;p=p->next;}else{p->next=t->next;free(t);printf("学生信息删除成功\n");return;}}printf("该学生学号不存在,请输入正确的学生学号\n");}// 修改学生信息void Modify(NODE *head){NODE* p=head;p=p->next;char num[12];printf("请输入要修改信息的学生学号:\n");scanf("%s",num);int choice;while(p!=NULL){if(strcmp(p->number,num)!=0){p=p->next;}else{printf("1.学号2.姓名3.性别4.班级5.电话\n请选择:");scanf("%d",&choice);switch(choice){case 1:printf("请输入要修改学生的学号:\n");scanf("%s",p->number);break;case 2:printf("请输入要修改学生的姓名:\n");scanf("%s",p->name);break;case 3:printf("请输入要修改学生的性别:\n");scanf("%s",p->sex);break;case 4:printf("请输入要修改学生的班级:\n");scanf("%s",p->classes);break;case 5:printf("请输入要修改学生的电话:\n");scanf("%s",p->tel);break;}break;}}}//将学生信息写入文件void WriteInfo(NODE *head){FILE* fp;NODE* p=head;if ((fp=fopen("C:\\Database.txt","wb"))==NULL){printf("不能打开学生文件!\n");return ;}p=p->next;while(p!=NULL){if (fwrite(p,sizeof(NODE),1,fp)!=1) // write info and check sucess or not{printf("写入学生文件错误!\n");}p=p->next;}fclose(fp);}//将学生信息从文件读出void ReadInfo(NODE* head){FILE* fp;NODE* p=head,*t;if ((fp=fopen("c:\\Database.txt","rb"))==NULL){printf("学生数据文件不存在,或文件打不开!\n");return ;}p->next=!NULL;while(p->next!=NULL){t=(NODE*)malloc(sizeof(NODE));fread(t,sizeof(NODE),1,fp);p->next=t;p=p->next;}fclose(fp);}// 释放链表void FreeList(NODE* head){NODE* p=head,* t=head;while(p!=NULL){p=p->next;free(t);t=p;}}// 退出程序void Exit(NODE* head){char ans;int flag=1;if (head->next!=NULL){printf("保存当前数据吗?请输入y/n:");while(flag){scanf("%c", &ans);getchar();if (ans=='y'||ans=='Y'){WriteInfo(head);flag=0;}else if (ans=='n'||ans=='N')flag=0;elseprintf("输入错误,请重新输入y/n:");}}FreeList(head); // release all nodesprintf("再见,谢谢使用!\n");}X。