-
2019-03-24 23:38:11
用单链表实现学生信息管理系统
问题描述
定义一个包含学生信息(学号,姓名,成绩)的的顺序表,使其具有如下功能:
(1) 根据指定学生个数,逐个输入学生信息;
(2) 逐个显示学生表中所有学生的相关信息;
(3) 根据姓名进行查找,返回此学生的学号和成绩;
(4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩);
(5) 给定一个学生信息,插入到表中指定的位置;
(6) 删除指定位置的学生记录;
(7) 统计表中学生个数。话不多说,直接上代码!
#include "stdio.h" #include "stdlib.h" //malloc #include "string.h" //学生信息的定义: typedef struct { char no[8]; //8位学号 char name[20]; //姓名 int score; //成绩 }Student; //链表结点的定义: typedef struct LNode{ Student data; //数据域 struct LNode *next; //指针域 }LNode,*LinkList; //输入学生信息 void in(LNode *head) { LinkList p,r; //p指向新结点; r指向当前链表的尾结点 int i,n; //n表示学生的人数 r=head; printf("请输入学生的人数:"); scanf("%d",&n); printf("请输入学生的信息:\n"); for(i=1;i<=n;i++) { p=(LinkList)malloc(sizeof(LNode)); p->next=NULL; printf("学号:"); scanf("%s",p->data.no); printf("姓名:"); scanf("%s",p->data.name); printf("成绩:"); scanf("%d",&p->data.score); r->next=p; r=r->next; printf("-----------------------------------------\n"); } printf("********************************************************\n"); } //输出学生信息 void out(LNode *head) { LinkList p; p=head; printf("请输出学生的信息:\n\n"); printf("学号\t姓名\t成绩\n"); while(p->next!=NULL) { p=p->next; printf("%s\t%s\t%d\n",p->data.no,p->data.name,p->data.score); } } void research_1(LNode *head,Student e) { LinkList p; p=head; printf("请输入查找的姓名:\n"); scanf("%s",e.name); while((p->next!=NULL)&&strcmp(e.name,p->data.name)) { p=p->next; } printf("学号 %s\t 成绩 %d\n",p->data.no,p->data.score); } void research_2(LNode *head,int i) { int k; LinkList p; printf("请输入你要查询的位置:"); scanf("%d",&i); if(i<0) { printf("查找失败!\n"); } p=head;k=0; while(p->next!=NULL&&k<i) { p=p->next; k=k+1; } if(i==k) printf("学号:%s\t 姓名: %s\t成绩: %d\n",p->data.no,p->data.name,p->data.score); else printf("查找失败!\n"); } void insert(LNode *head,int i,Student e) { int k; LinkList p,r; r=head;k=0; printf("请输入你要插入的位置:\n"); scanf("%d",&i); printf("请输入插入学生的信息:\n"); printf("学号:\n"); scanf("%s",e.no); printf("姓名:\n"); scanf("%s",e.name); printf("成绩:\n"); scanf("%d",&e.score); while(r!=NULL&&k<i-1) { r=r->next; k=k+1; } if(r==NULL) { printf("插入失败!\n"); } p=(LinkList)malloc(sizeof(LNode)); p->data=e; p->next=r->next; r->next=p; printf("插入成功!\n"); } void delete_1(LNode *head,int i,Student *e) { LinkList p,r; int k; r=head;k=0; printf("请输入你要删除的位置:\n"); scanf("%d",&i); while(r->next!=NULL&&k<i-1) { r=r->next; k++; } if(r==NULL) { printf("删除失败!\n"); } p=r->next; r->next=p->next; *e=p->data; free(p); printf("删除成功!\n"); } void number(LNode *head) { int i; LinkList p; p=head->next;i=0; while(p!=NULL) { p=p->next; i++; } printf("学生总数为:%d\n",i); printf("\n"); } void exit_1() { printf("退出成功!请按任意键结束!"); exit(0); } int main() { LNode *head; head=(LinkList)malloc(sizeof(LNode)); head->next=NULL; int select=-1; int i; Student e; 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"); while(select!=0) { printf("请选择你要操作的选项:"); scanf("%d",&select); printf("\n"); switch(select) { case 1: in(head); break; case 2: out(head); break; case 3: research_1(head,e);break; case 4: research_2(head,i);break; case 5: insert(head,i,e);break; case 6: delete_1(head,i,&e);break; case 7: number(head);break; case 8: exit_1();break; } } return 0; }
更多相关内容 -
用单链表实现学生信息管理系统c语言版本
2021-03-22 17:01:53加粗样式登陆界面管理员操作的功能对已经添加的学生记录单链表文件查看``void Display(connect pCur)//±í¸ñÐÎʽÏÔʾ¼Ç¼{record *p;p=pCur->next;if(!p){printf("\n***************ûÓÐѧ...加粗样式
登陆界面
管理员操作的功能
对已经添加的学生记录单链表文件查看``
void Display(connect pCur)//±í¸ñÐÎʽÏÔʾ¼Ç¼
{
record *p;
p=pCur->next;
if(!p)
{
printf("\n***************ûÓÐѧÉú±»¼Ç¼***************\n");
getchar();
return;
}
printf("\n\n");
Header();
while(p)
{
Output(p);
p=p->next;
printf(h3);
}
getchar();
}
void Header()
{
printf(h1);
printf(h2);
printf(h3);
}
void Output(record *pp)
{
record* p;
p=pp;
printf(h4,dataBase);
}
void Unfind()
{
printf("\n=========>δ²éµ½´ËѧÉúÐÅÏ¢!<==========\n");
}
信息保存为文件IO文件流操作
这里是重点插入链表`void Insert(connect pCur)//数据插入
{
connect p,n,newinsert;
char id2[20];
char ch;
int flog=0;
n=pCur->next;
system(“cls”);
Display(pCur);
printf(“输入要插入之前的学号:”);
scanf("%s",id2);
while(pCur)
{
flog=0;
n=pCur->next;
while(n)
{
if(strcmp(n->date.id,id2)==0);
{
flog=1;
break;
}
n=n->next;
}
if(flog==1)
break;
else
{
getchar();
printf("学生学号不存在,输入y,Y继续,输入其他结束程序\n");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
{
continue;
}
else
{
return ;
}
}
}
printf("输入要插入的学号");
char id3[20];
scanf("%s",id3);
n=pCur->next;
while(n)
{
if(strcmp(n->date.id,id3)==0)
{
printf("此学号已存在");
Header();
Output(n);
printf("\n");
getchar();
return ;
}
n=n->next;
}
newinsert = (record *)malloc(sizeof(record));
if(newinsert==NULL)
{
printf("未申请到空间");
return ;
}
strcpy( newinsert->date.id,id3);
printf("输入学生学号:%s\n",newinsert->date.id);
printf("输入学生姓名:");
scanf("%s",newinsert->date.name);
printf("输入学生c语言成绩:");
scanf("%d",&newinsert->date.cResults);
printf("输入学生英语成绩:");
scanf("%d",&newinsert->date.englishResults);
printf("输入学生高数成绩:");
scanf("%d",&newinsert->date.mathematicsResults);
newinsert->date.total=newinsert->date.cResults+newinsert->date.englishResults+newinsert->date.mathematicsResults;
newinsert->next=NULL;
saveflog=1;
p=pCur->next;
while(pCur)
{
if(strcmp(p->date.id,id2)==0)
{
newinsert->next=p->next;
p->next=newinsert;
break;
}
p=p->next;
}
system("cls");
Display(pCur);
}
`
点赞
收藏
分享
文章举报
qq_43209019
发布了2 篇原创文章 · 获赞 1 · 访问量 216
私信
关注
-
C语言单链表版学生信息管理系统
2021-01-20 06:56:35本文实例为大家分享了C语言学生信息管理系统的具体代码,供大家参考,具体内容如下 代码: //以单链表作为存储结构,设计和实现课程成绩管理的完整程序。 //程序包括如下功能。 //1.建立学生成绩表,包含学生的... -
数据结构—单链表实现学生信息管理系统
2019-06-19 13:50:22//初始化(带头结点的单链表) int InitList(LinkList &L) { L = new LNode; L->next = NULL; return 1; } //判断链表是否为空 int ListEmpty(LinkList L) { if (L->next == NULL) { return 1; // 链表为空...- 代码
- main.cpp
#include<iostream> using namespace std; typedef struct STU { char name[20]; char sno[20]; int age; float score; }Student; typedef struct LNode { Student data; struct LNode *next; }LNode, *LinkList; //初始化(带头结点的单链表) int InitList(LinkList &L) { L = new LNode; L->next = NULL; return 1; } //判断链表是否为空 int ListEmpty(LinkList L) { if (L->next == NULL) { return 1; // 链表为空 } else { return 0;//链表非空 } } //获取链表长度 int ListLength(LinkList L) { int length = 0; LNode *p; p = L->next; while (p) { p = p->next; length++; } return length; } //遍历链表 void TraveList(LinkList L) { LNode *p; p = L->next; printf("链表结构如下:\n"); while (p) { printf("%s %s %d %.2f", p->data.name, p->data.sno, p->data.age, p->data.score); printf("\n"); p = p->next; } } //插入操作 int ListInsert(LinkList &L, int location, Student &e) { //在链表L的location位置插入元素e LNode *p; int j = 0; p = L; while (p&&j < location - 1) { p = p->next; j++; } if (!p || j > location - 1) { return 0; } LNode *s; s = new LNode; s->data = e; s->next = p->next; p->next = s; return 1; } //删除操作 int ListDelete(LinkList &L, int location, Student &e) { //删除L中location位置的元素,并用e返回其值 LNode *p; int j = 0; p = L; while (p->next&&j < location - 1) { p = p->next; j++; } if (!(p->next) || j > location - 1) { return 0; } LNode *q; q = p->next; p->next = q->next; e = q->data; delete q; return 1; } //头插法法创建单链表 void CreateList1(LinkList &L, int n) { //创建长度为n的单链表 L = new LNode; L->next = NULL; printf("请输入链表元素:\n"); for (int i = 0; i < n; i++) { printf("请输入第%d个元素值:\n", i + 1); LNode *p; p = new LNode;//生成新结点 //输入 printf("请输入姓名:"); scanf("%s", p->data.name); printf("请输入学号:"); scanf("%s", p->data.sno); printf("请输入年龄:"); scanf("%d", &p->data.age); printf("请输入成绩:"); scanf("%f", &p->data.score); // 插入 p->next = L->next; L->next = p; } } // 尾插法创建单链表 void CreateList2(LinkList &L, int n) { L = new LNode; L->next = NULL; LNode *r; r = L; printf("请输入链表元素值:\n"); for (int i = 0; i < n; i++) { LNode *p; p = new LNode; printf("请输入第%d个元素的值:\n", i + 1); printf("请输入姓名:"); scanf("%s", p->data.name); printf("请输入学号:"); scanf("%s", p->data.sno); printf("请输入年龄:"); scanf("%d", &p->data.age); printf("请输入成绩:"); scanf("%f", &p->data.score); p->next = NULL; r->next = p; r = p; } } int main() { LinkList L; printf("1.初始化链表\n"); printf("2.创建链表\n"); printf("3.插入操作\n"); printf("4.删除操作\n"); printf("0.退出\n"); int choose = -1; while (choose != 0) { printf("请选择操作:\n"); scanf("%d", &choose); switch (choose) { case 1: { if (InitList(L)) { printf("链表初始化成功!\n"); } else { printf("链表初始化失败!\n"); } break; } case 2: { printf("1.头插法创建单链表\n"); printf("2.尾插法创建单链表\n"); printf("请选择操作:\n"); int choose1; scanf("%d", &choose1); switch (choose1) { case 1: { printf("请输入链表长度:\n"); int n; scanf("%d", &n); CreateList1(L, n); TraveList(L); break; } case 2: { printf("请输入链表长度:\n"); int n; scanf("%d", &n); CreateList2(L, n); TraveList(L); break; } } break; } case 3: { printf("请输入插入的位置:\n"); int location; scanf("%d", &location); Student stu; printf("请输入姓名:"); //char name[20]; scanf("%s", stu.name); printf("请输入学号:"); scanf("%s", stu.sno); printf("请输入年龄:"); scanf("%d", &stu.age); printf("请输入成绩:"); scanf("%f", &stu.score); if (ListInsert(L, location, stu)) { printf("插入成功!\n"); TraveList(L); } else { printf("插入失败!\n"); } //TraveList(L); break; } case 4: { printf("请输入要删除的元素的位置:\n"); int location; scanf("%d", &location); Student stu; if (ListDelete(L, location, stu)) { printf("删除成功!\n"); printf("删除的元素值是:\n"); printf("%s %s %d %.2f\n", stu.name, stu.sno, stu.age, stu.score); TraveList(L); } else { printf("删除失败!\n"); } break; } } } system("pause"); }
- 运行结果
-
单链表实现学生管理系统(源代码)
2020-05-22 09:24:39int main(void) { while (1) { Menu(); InputChoice(); system("pause"); system("cls");//清屏 } system("pause"); return 0; } -
【用C语言的单链表实现学生信息管理系统】
2022-07-11 16:20:04C语言 学生信息管理系统 单链表前言
单链表:是指一个结构体,该结构体的最后一个元素,是一个指向该结构体类型的指针,这个指针,指向下一个该类型的结构体,这样形成一个具有n个这种结构体元素的链式存储结构体链表,链表中的每一个节点都是一个该结构体,并且最后一个元素都是一个next指针,指向下一个节点。
遍历该结构体链表:
只需先判断一下该链表的头节点是否为空:if(NULL==head)return;
然后声明一个该结构体元素,用头节点的next指针指向该元素:
Student* n = head->next;
之后开始循环即可:
while(n)
{
if(n->id == id)
{
printf(“%d %d %s %s\n”,n->id,n->age,n->name,n->tel);
}
n=n->next;
}一、代码如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Student
{
int id;
int age;
char name[30];
char tel[12];
struct Student* next;
} Student;///
/// 显示欢迎信息
///
int menu();
///
/// 初始化学生链表
///
/// 指向头节点指针head的指针
void initStudent(Student** s);
///
/// 插入一个学生
///
/// 学生链表的头指针
/// 插入的位置
/// 待插入的学生
void InsertStudent(Student* h, int num, Student s);
///
/// 增加1个学生
///
void addStudent(Student* h);
///定位学生s在链表h中的位置
int LocateStudent(Student* h, Student s);
///
/// 显示学生信息
///
void showStudent(Student* head);
///
/// 删除学生信息
///
/// 学生链表的头指针
void delStudent(Student* h,int id);
///
/// 修改学生信息
///
/// 学生链表的头节点
void modifyStudent(Student* h);
///
/// 查找学生信息
///
///
void findStudent(Student* h);
int main()
{
Student* head = NULL;
initStudent(&head);
while (1)
{
int choice = menu();
switch (choice)
{
case 1:addStudent(head); break;
case 2:showStudent(head); break;
case 3:
int id = -1;
printf(“请输入要删除的学生的学号:”);
scanf(“%d”, &id);
delStudent(head,id); break;
case 4:modifyStudent(head); break;
case 5:findStudent(head); break;
case 6:return;
}
}
return 0;
}
///
/// 显示欢迎信息
///
int menu()
{
printf(“-----------------------------------------------\n”);
printf(“------------欢迎使用学生信息管理系统-----------\n”);
printf(“------------ 1. 新 增 学 生 -----------\n”);
printf(“------------ 2. 显 示 全 部 学 生 -----\n”);
printf(“------------ 3. 删 除 学 生 -----------\n”);
printf(“------------ 4. 修 改 学 生 -----------\n”);
printf(“------------ 5. 查 找 学 生 -----------\n”);
printf(“------------ 6. 退 出 系 统 -----------\n”);
printf(“-----------------------------------------------\n”);
printf(“请输入您的选择:”);
int choice = -1;
scanf(“%d”, &choice);
return choice;
}///
/// 初始化学生链表
///
/// 指向头节点指针head的指针
void initStudent(Student** s)
{
(s) = (Student)malloc(sizeof(Student) * 1);
if (NULL == (s))
{
printf(“申请头指针失败\n”);
return;
}
(s)->next = NULL;
}
///定位学生s在链表h中的位置
int LocateStudent(Student h, Student s)
{
if (NULL == h)
return -1;
int p = 1;
Student n = h->next;
while (n)
{
if (n->id > s.id)
{
return p;
}
n = n->next;
p++;
}
return p;
}///
/// 插入一个学生
///
/// 学生链表的头指针
/// 插入的位置
/// 待插入的学生
void InsertStudent(Student* h, int num, Student s)
{
if (NULL == h)
return;
Student* n = h;
int k = 1;
while (k < num && n)
{
n = n->next;
k++;
}
if (n == NULL || k > num)
{
printf(“插入节点的位置有误\n”);
return;
}
Student* m = (Student*)malloc(sizeof(Student));
if (NULL == m)
{
printf(“申请节点失败\n”);
return;
}
m->id = s.id;
m->age = s.age;
strcpy(m->name, s.name);
strcpy(m->tel, s.tel);
m->next = n->next;
n->next = m;
}
///
/// 增加1个学生
///
void addStudent(Student* h)
{
if (NULL == h)
return;
printf(“请输入学号、年龄、姓名、电话…\n”);
Student s;
int flag = 1;
while (flag)
{
scanf(“%d %d %s %s”, &s.id, &s.age, s.name, s.tel);
//判断电话长度
if (strlen(s.tel) != 11)
{
printf(“电话长度输入有误,请重新输入全部信息\n”);
continue;
}
flag = 0;
//遍历链表,判断电话是否重复
Student* p = h->next;
while §
{
if (!strcmp(s.tel, p->tel))
{
printf(“输入的电话重复,请重新输入…\n”);
flag = 1;
break;
}
p = p->next;
}
}
int num = LocateStudent(h, s);
InsertStudent(h, num, s);
printf(“插入数据成功\n”);
}
///
/// 显示学生信息
///
void showStudent(Student* head)
{
if (NULL == head)
return;
Student* n = head->next;
while (n)
{
printf(“%d %d %s %s\n”, n->id, n->age, n->name, n->tel);
n = n->next;
}
}
///
/// 删除学生信息
///
/// 学生链表的头指针
void delStudent(Student* h,int id)
{
if (NULL == h)
return;
Student* n1 = h->next, * n2 = h;
while (n1)
{
if (n1->id == id)
{
n2->next = n1->next;
free(n1);
printf(“删除信息成功\n”);
return;
}
n1 = n1->next;
n2 = n2->next;
}
printf(“学生不存在\n”);
}
///
/// 修改学生信息
///
/// 学生链表的头节点
void modifyStudent(Student* h)
{
if (NULL == h)
return;
printf(“请输入需要修改的学生的学号:”);
int id = -1;
scanf(“%d”, &id);
Student* n = h->next;
while (n)
{
if (n->id == id)
{
delStudent(h, id);
addStudent(h);
printf(“修改信息成功\n”);
return;
}
n = n->next;
}
printf(“学生不存在\n”);
}
///
/// 查找学生信息
///
///
void findStudent(Student* h)
{
if (NULL == h)
return;
int id = -1;
printf(“请输入要查找的学生的学号:”);
scanf(“%d”, &id);
Student* p = h->next;
while §
{
if (p->id == id)
{
printf(“%d %d %s %s\n”, p->id, p->age, p->name, p->tel);
return;
}
p = p->next;
}
printf(“学号不存在\n”);
}总结
将这些代码复制到Visual Studio 2019,新建一个解决方案,把原来的main.cpp文件删掉,新建一个main.c文件,把这些代码复制进去,然后编译链接运行即可。
运行截图如下:
-
C语言实践(一)单链表实现学生信息管理系统
2022-05-01 11:29:33根据指定学生个数,逐个输入学生信息; *\n"); printf("* 2.浏览每个学生的信息; *\n"); printf("* 3.根据学号查询某个学生的基本信息; *\n"); printf("* 4、删除一个学生的信息。 *\n"); printf("* 5. 退出系统 ... -
学生信息管理系统(c语言单链表实现)
2018-10-15 20:35:42学生信息管理系统,压缩包有源码,程序,报告。声明:本人只是用来学习。 -
基于单链表的学生信息管理系统源代码.pdf
2021-06-26 15:34:44基于单链表的学生信息管理系统源代码 -
用单链表(c语言)实现学生信息管理系统
2021-02-20 23:29:03刚学到单链表,结合之前用Java实现学生信息管理系统的经验用单链表实现了一遍。 由于是小白,所以代码写得很基础,大佬轻喷( 另外,我发誓以后再也不做学生信息管理系统了。。太无聊了 #include<stdio.h> #... -
实现学生信息管理系统
2017-04-17 16:22:48JavaAWT和MySQL实现学生信息管理系统,Java和MySQL实现学生信息管理系统 -
基于单链表的学生信息管理系统源代码
2021-04-23 17:04:22//学生信息管理系统#include#include#include#define NULL 0#define LEN sizeof(struct student)//建立动态链表.cppusing namespace std;struct student{int num;char name[20];char sex[5];float math;float ... -
C语言基础篇02:单链表实现学生成绩管理系统
2021-11-22 10:41:34单链表实现学生成绩管理系统前言需求分析详细设计增加成绩信息删除成绩信息 前言 上篇已经讲过单链表的基本实现,这篇将以一个简单的管理系统入手。 详细讲解下如何在原来单链表的基础上实现一个简单的管理系统。 ... -
C语言实现学生信息管理系统(单链表)
2020-12-26 07:02:54本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下 /*copyright(c)2016.烟台大学计算机学院 * All rights reserved, * 文件名称:text.Cpp * 作者:吴敬超 * 完成日期:2016... -
数据结构(Java实现)-单链表(单链表实现学生成绩管理系统)
2020-08-14 15:33:551、链表 1.1链表的基本介绍 ...有头节点单链表:phead是头节点只不过头节点的data不保存信息 基本概念:链表的每个元素称为一个节点,每个节点都可以存储在内存中的不同的位置,为了表示每个元素与后继元素 -
《数据结构》进行曲 之 单链表实现学生信息管理系统
2021-03-22 17:01:30搜索热词 #include #include using namespace std; #define MAX 100 typedef struct STU{ char name[20]; char sno[20];... 本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。 -
c++单链表 实现学生信息管理
2021-07-20 20:11:26带有头结点的单链表的插入 Status ListInsert(Linklist &L,int i,Student e){ Linklist p ;p=L;int j=0;//j相当于计数器 Linklist s; while(p&&(j<i-1)) { p=p->next;++j; } if... -
学生信息管理系统(C语言 单链表实现)
2022-05-27 12:47:16学生信息管理系统(C语言 单链表实现) 【学生管理系统2.0】 ★————————————————————————————————————————★ | 1. 信息录入 2. 成绩录入 3. 信息查询 | | 4. -
Visual Sdutio C++中运用单链表完成学生信息管理系统
2021-09-09 10:22:32//创建学生结构变量 struct Student { long long Id; char Name[20]; int chineseScore; int mathScore; int englishScore; }; //结点结构体 struct Node { Student data; struct Node* next; }; ... -
用单链表实现学生信息管理系统(7.23周末作业)
2022-07-23 16:02:03使用单链表的数据结构实现小型学生信息管理系统,在此基础上实现增删查改及排序等功能 -
单链表创建学生信息管理系统
2011-06-18 13:00:35用链表创建的学生信息故那里系统,包括添加,删除,修改,查询,统计,排序,等基本操作,本系统用C语言编写。 -
单链表实现的学生管理系统
2018-04-23 00:06:07这个学生管理系统是通过单链表实现的,这个管理系统是为了让我们更好得对链表进行操作。#include <stdio.h> #include <stdlib.h> #include <string.h> #include <... -
用链表实现学生信息管理系统
2022-03-25 16:52:32//学生信息结构体 typedef struct Student { int id; //4位编号 int num; //6位学号 char name[50]; //姓名 double score; //成绩 } STU; //链表节点的结构体 typedef struct NODE { STU date; /...