栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言实现学生信息录入系统(链表)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言实现学生信息录入系统(链表)

今天我们一起来看看学生信息录入系统的初级版吧!!!

目录

一、建立链表节点

二、打印菜单

三、选择系统

四、初始化

五、录入信息

六、追加信息

七、修改信息

八、删除信息

九、查找信息

十、显示信息

十一、退出系统

十二、完整代码


一、建立链表节点

采用结构体实施,分为数据域和指针域,链表的使用是本程序的难点……

typedef struct STUDENT{
	char xh[20], xm[20];//学号、姓名
	float cj;//成绩
	struct STUDENT* next;
}Student;
typedef struct HEADER{
	char bjm[20];//班级名
	int cnt;//班级人数
	struct STUDENT* next;
}Header;

二、打印菜单
//菜单
void menu(){
	int i = 0;
	system("cls");
	for (i = 0; i < 52; i++)
		printf("*");
	printf("n");
	puts("* 1、初始化   2、录入信息 3、追加信息 4、修改信息  *");
	puts("* 5、删除信息 6、查找信息 7、显示信息 8、退出系统  *");
	for (i = 0; i<52; i++)
		printf("*");
}

三、选择系统
//选择系统
int selec(){
	Header head={"0"};//整体初始化为0
	int i,j;
	while(1){
		menu();
		printf("nn请选择选项:> ");
		scanf("%d",&i);
		switch(i){ 
		case 1:init(&head);break;
		case 2:input(&head);break;
		case 3:append(&head);break;
		case 4:modify(&head);break;
		case 5:del(&head);break;
		case 6:find(&head);break;
		case 7:show(head);break;
		case 8:	j=Exit();
				if(j==1) return 1;
				break;
		default:printf("你的选择有误,请重新选择!n");
			system("pause");
			break;
		}
	}
}

四、初始化
//1、初始化
void init(Header *head){
	printf("输入班级名:> ");
	scanf("%s", head->bjm);
	printf("输入班级人数:> ");
	scanf("%d", &head->cnt);
	head->next = 0;
	printf("初始化完毕n");
	system("pause");
}

五、录入信息
//2、录入信息
void input(Header *head){
	Student *tail;//尾指针
	head->next =NULL;
	printf("录入学生的信息:学号 姓名 成绩n");
	for (int i = 0; icnt; i++){
		Student* stu;
		stu = (Student*)malloc(sizeof(Student));//动态申请一个节点
		if (stu == NULL){//如果stu节点为空,说明没有malloc到空间
			printf("mallco Fail!");
			return;
		}
		stu->next = NULL;//初始化stu的指针
		if (head->next == NULL){//说明没有输入数据
			head->next = stu;//头节点的下一个指向stu节点
			tail = stu;//让尾指针指向stu
			scanf("%s%s%f", stu->xh, stu->xm, &stu->cj);
		}
		else{//说明已经输入了数据
			tail->next = stu;//尾指针的下一个指向stu
			tail = tail->next;//尾指针往下面移动
			scanf("%s%s%f", stu->xh, stu->xm, &stu->cj);
		}
	}
	printf("录入信息完毕n");
	system("pause");
}

六、追加信息
//3、追加信息
void append(Header *head){
	int i,j;
	Student*p=head->next;
	Student *stu;
	stu = (Student*)malloc(sizeof(Student));//申请一个节点用于存放追加的学生的信息
	if (stu == NULL){//如果stu节点为空,说明没有malloc到空间
			printf("mallco Fail!");
			return;
		}
	stu->next=NULL;//初始化stu的指针
	printf("请选择你要在哪一名学生后面增加一个学生信息:> ");
    scanf("%d",&i);
	j=i;
	while(--i)
	{
		p=p->next;
	}
	printf("请输入第%d个学生的学号,姓名,成绩:n",++j);
	scanf("%s%s%f",stu->xh,stu->xm,&stu->cj );//输入信息
	head->cnt++;//学生人数+1
	fflush(stdin);//刷新输入——清空输入缓冲区
	stu->next=p->next;
	p->next=stu;
	printf("追加信息完毕n");
	system("pause");
}

七、修改信息
//4、修改信息
void modify(Header *head){
	int i;
	Student *p;
	p=head->next;
	printf("请选择你要修改第几个学生的信息:> ");
	scanf("%d",&i);
	while(--i) p=p->next;
	if(p==NULL)
	{
		printf("该学生不存在!");
		return;
	}
	else
	{
	puts("请选择你要修改的内容:");
	puts("n** 1、学生姓名 **** 2、学生学号 **** 3、学生成绩 **n");
	fflush(stdout);//刷新输出——清空读写缓冲区
	scanf("%d",&i);
    switch(i)
	{
	case 1:printf("原信息为%sn",p->xm);printf("请输入你要修改的内容n");scanf("%s",p->xm);break;
	case 2:printf("原信息为%sn",p->xh);printf("请输入你要修改的内容n");scanf("%s",p->xh);break;
	case 3:printf("原信息为%.2fn",p->cj);printf("请输入你要修改的内容n");scanf("%f",&p->cj);break;
    default:printf("你的选择有误!n");break;
	}
	fflush(stdin);
	}
	printf("修改信息完毕n");
	system("pause");
}

八、删除信息
//5、删除信息
void del(Header *head){
	int i,flag=1;
	Student*p=head->next;
    Student*q=head->next;
	Student*k=head->next;
	head->next=NULL;
	printf("请输入你要删除第几名学生的信息:>");
	scanf("%d",&i);
	if(i==1){//删除第一个
		p=p->next;
		head->next=p;
		free(q);
		head->cnt--;
		printf("删除信息完毕!n");
		system("pause");
		return;
	}
	while(--i)
	{ 
	p=p->next;
	if(flag==0){
		q=q->next;
	}
	flag=0;
	}
	if(p->next==NULL){
		q->next=NULL;
        head->next=k;
		free(p);
		head->cnt--;
		printf("删除信息完毕!n");
		system("pause");
       return;
	}
	if(p==NULL)
	puts("该学生不存在!");
	q->next=p->next;
	head->next=k;
	free(p);
	head->cnt--;
	printf("删除信息完毕!n");
	system("pause");
}

九、查找信息
//6、查找信息
void find(Header *head){
	int i;
	Student*p=head->next;
	char Xh[20],Xm[20];
	puts("n** 1 按学号查找 *** 2 按姓名查找 **n");
	printf("请选择你想查找的方式:> ");
	scanf("%d",&i);
	if(i!=1&&i!=2){
		puts("你的选择出错!");
        system("pause");
		return;
	}
	if(i==1){
		printf("请输入该生的学号:n");
		scanf("%s",Xh);
		while(p){
			if(strcmp(Xh,p->xh)==0){
				puts("该生的信息如下:");
				printf("%s %s %.2fn",p->xh,p->xm,p->cj);
				system("pause");
				break;
			}
		p=p->next;
		}
	}
	else{
		printf("请输入该生的姓名n");
		scanf("%s",Xm);
		while(p){
			if(strcmp(Xm,p->xm)==0){ 
				puts("该生的信息如下:");
				printf("%s %s %.2fn",p->xh,p->xm,p->cj);
				system("pause");
				break;
			}	
		p=p->next;
		}
	}
	printf("信息查找完毕n");
	system("pause");
}

十、显示信息
//7、显示信息
void show(Header head){
	Student *p;
	p = head.next;
	if(p==NULL)
	puts("你还没有录入信息!n");
	printf("%s 共有 %d 名学生,具体信息如下:n", head.bjm, head.cnt);
	for (int i = 0; ixh, p->xm, p->cj);
		p = p->next;
	}
	printf("信息显示完毕!n");
	system("pause");
}

十一、退出系统
//8、退出系统
int Exit(){
	int i;
again:
	system("cls");
	menu();
	puts("nn** 1、确认退出 *** 0、重新开始 **n");
	printf("您的选择是:> ");
	scanf("%d",&i);
	switch(i){
	case 1:printf("退出成功!n");return i;break;
	case 0:break;
	default:printf("选择无效,请重新选择!n");system("pause");goto again;
	}
	return i;
}

十二、完整代码
#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include 
#include 

typedef struct STUDENT{
	char xh[20], xm[20];//学号、姓名
	float cj;//成绩
	struct STUDENT* next;
}Student;
typedef struct HEADER{
	char bjm[20];//班级名
	int cnt;//班级人数
	struct STUDENT* next;
}Header;

//菜单
void menu(){
	int i = 0;
	system("cls");
	for (i = 0; i < 52; i++)
		printf("*");
	printf("n");
	puts("* 1、初始化   2、录入信息 3、追加信息 4、修改信息  *");
	puts("* 5、删除信息 6、查找信息 7、显示信息 8、退出系统  *");
	for (i = 0; i<52; i++)
		printf("*");
}

//1、初始化
void init(Header *head){
	printf("输入班级名:> ");
	scanf("%s", head->bjm);
	printf("输入班级人数:> ");
	scanf("%d", &head->cnt);
	head->next = 0;
	printf("初始化完毕n");
	system("pause");
}

//2、录入信息
void input(Header *head){
	Student *tail;//尾指针
	head->next =NULL;
	printf("录入学生的信息:学号 姓名 成绩n");
	for (int i = 0; icnt; i++){
		Student* stu;
		stu = (Student*)malloc(sizeof(Student));//动态申请一个节点
		if (stu == NULL){//如果stu节点为空,说明没有malloc到空间
			printf("mallco Fail!");
			return;
		}
		stu->next = NULL;//初始化stu的指针
		if (head->next == NULL){//说明没有输入数据
			head->next = stu;//头节点的下一个指向stu节点
			tail = stu;//让尾指针指向stu
			scanf("%s%s%f", stu->xh, stu->xm, &stu->cj);
		}
		else{//说明已经输入了数据
			tail->next = stu;//尾指针的下一个指向stu
			tail = tail->next;//尾指针往下面移动
			scanf("%s%s%f", stu->xh, stu->xm, &stu->cj);
		}
	}
	printf("录入信息完毕n");
	system("pause");
}

//3、追加信息
void append(Header *head){
	int i,j;
	Student*p=head->next;
	Student *stu;
	stu = (Student*)malloc(sizeof(Student));//申请一个节点用于存放追加的学生的信息
	if (stu == NULL){//如果stu节点为空,说明没有malloc到空间
			printf("mallco Fail!");
			return;
		}
	stu->next=NULL;//初始化stu的指针
	printf("请选择你要在哪一名学生后面增加一个学生信息:> ");
    scanf("%d",&i);
	j=i;
	while(--i)
	{
		p=p->next;
	}
	printf("请输入第%d个学生的学号,姓名,成绩:n",++j);
	scanf("%s%s%f",stu->xh,stu->xm,&stu->cj );//输入信息
	head->cnt++;//学生人数+1
	fflush(stdin);//刷新输入——清空输入缓冲区
	stu->next=p->next;
	p->next=stu;
	printf("追加信息完毕n");
	system("pause");
}

//4、修改信息
void modify(Header *head){
	int i;
	Student *p;
	p=head->next;
	printf("请选择你要修改第几个学生的信息:> ");
	scanf("%d",&i);
	while(--i) p=p->next;
	if(p==NULL)
	{
		printf("该学生不存在!");
		return;
	}
	else
	{
	puts("请选择你要修改的内容:");
	puts("n** 1、学生姓名 **** 2、学生学号 **** 3、学生成绩 **n");
	fflush(stdout);//刷新输出——清空读写缓冲区
	scanf("%d",&i);
    switch(i)
	{
	case 1:printf("原信息为%sn",p->xm);printf("请输入你要修改的内容n");scanf("%s",p->xm);break;
	case 2:printf("原信息为%sn",p->xh);printf("请输入你要修改的内容n");scanf("%s",p->xh);break;
	case 3:printf("原信息为%.2fn",p->cj);printf("请输入你要修改的内容n");scanf("%f",&p->cj);break;
    default:printf("你的选择有误!n");break;
	}
	fflush(stdin);
	}
	printf("修改信息完毕n");
	system("pause");
}

//5、删除信息
void del(Header *head){
	int i,flag=1;
	Student*p=head->next;
    Student*q=head->next;
	Student*k=head->next;
	head->next=NULL;
	printf("请输入你要删除第几名学生的信息:>");
	scanf("%d",&i);
	if(i==1){//删除第一个
		p=p->next;
		head->next=p;
		free(q);
		head->cnt--;
		printf("删除信息完毕!n");
		system("pause");
		return;
	}
	while(--i)
	{ 
	p=p->next;
	if(flag==0){
		q=q->next;
	}
	flag=0;
	}
	if(p->next==NULL){
		q->next=NULL;
        head->next=k;
		free(p);
		head->cnt--;
		printf("删除信息完毕!n");
		system("pause");
       return;
	}
	if(p==NULL)
	puts("该学生不存在!");
	q->next=p->next;
	head->next=k;
	free(p);
	head->cnt--;
	printf("删除信息完毕!n");
	system("pause");
}

//6、查找信息
void find(Header *head){
	int i;
	Student*p=head->next;
	char Xh[20],Xm[20];
	puts("n** 1 按学号查找 *** 2 按姓名查找 **n");
	printf("请选择你想查找的方式:> ");
	scanf("%d",&i);
	if(i!=1&&i!=2){
		puts("你的选择出错!");
		system("pause");
		return;
	}
	if(i==1){
		printf("请输入该生的学号:n");
		scanf("%s",Xh);
		while(p){
			if(strcmp(Xh,p->xh)==0){
				puts("该生的信息如下:");
				printf("%s %s %.2fn",p->xh,p->xm,p->cj);
				system("pause");
				break;
			}
		p=p->next;
		}
	}
	else{
		printf("请输入该生的姓名n");
		scanf("%s",Xm);
		while(p){
			if(strcmp(Xm,p->xm)==0){ 
				puts("该生的信息如下:");
				printf("%s %s %.2fn",p->xh,p->xm,p->cj);
				system("pause");
				break;
			}	
		p=p->next;
		}
	}
	printf("信息查找完毕n");
	system("pause");
}

//7、显示信息
void show(Header head){
	Student *p;
	p = head.next;
	if(p==NULL)
	puts("你还没有录入信息!n");
	printf("%s 共有 %d 名学生,具体信息如下:n", head.bjm, head.cnt);
	for (int i = 0; ixh, p->xm, p->cj);
		p = p->next;
	}
	printf("信息显示完毕!n");
	system("pause");
}

//8、退出系统
int Exit(){
	int i;
again:
	system("cls");
	menu();
	puts("nn** 1、确认退出 *** 0、重新开始 **n");
	printf("您的选择是:> ");
	scanf("%d",&i);
	switch(i){
	case 1:printf("退出成功!n");return i;break;
	case 0:break;
	default:printf("选择无效,请重新选择!n");system("pause");goto again;
	}
	return i;
}

int selec(){
	Header head={"0"};//整体初始化为0
	int i,j;
	//选择系统
	while(1){
		menu();
		printf("nn请选择选项:> ");
		scanf("%d",&i);
		switch(i){ 
		case 1:init(&head);break;
		case 2:input(&head);break;
		case 3:append(&head);break;
		case 4:modify(&head);break;
		case 5:del(&head);break;
		case 6:find(&head);break;
		case 7:show(head);break;
		case 8:	j=Exit();
				if(j==1) return 1;
				break;
		default:printf("你的选择有误,请重新选择!n");
			system("pause");
			break;
		}
	}
}
int main(){
	selec();
	return 0;
}

程序执行图就不摆了,感兴趣的盆友自行复制执行,不足之处,欢迎在评论区留言,共同进步!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/864961.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号