C/C++:学生管理系统(适合初学者)

今天趁着没事做想写一个简单的控制台程序——学生管理系统

相信很多接触C/C++的初学者来说,学生管理系统无疑是检验是否学懂C/C++基本语法的最基本项目

下面开始简单介绍一下我的思路:

1.系统界面

2.实现增删查改功能

用到的相关知识:

1.结构体

2.链表

3.循环语句、判断语句

这里我要说明一点,可能看完我的程序会有点懵逼,我写了一个大题框架,具体的细节没有去抠,读者根据自己的需求来修改一下即可。

程序中定义了一个学生的结构体,使用结构体链表来存储学生数据(学的深的朋友可以尝试与数据库建立连接,把数据存储在数据库中),为了偷懒,我选择使用带头节点的单链表(用双链表操作更舒服一些)。

我把结构体写在StudentStruct.h中

//StudentStruct.h
 struct stu
{
	char stu_name[10]; //姓名
	int stu_age;  //年龄
	char stu_id[10]; //学生id
	int stu_grade;  //年级 1/2/3/4
	int stu_sort; //本科or研究生
	struct stu* next;
	
};

下面是程序的.c文件

#include <iostream>
#include<stdio.h>
#include<string.h>
#include"StudentStruct.h"

void welcome();
void list();
void add_info();
void delete_info();
void check_info();
void modify_info();

stu *Stu = NULL;
stu *head=NULL;
stu* temp = NULL;

int main()
{
	Stu = (stu*)malloc(sizeof(stu));
	Stu->next = NULL;
	head = Stu;
	welcome();
	while(1)
	list();
	return 0;

}

void welcome()
{
	printf("******************************************** \n");
	printf("\n");
	printf("Welcome to Student Administration System \n");
	printf("\n");
	printf("1.添加学生信息\n");
	printf("2.删除学生信息\n");
	printf("3.查询学生信息\n");
	printf("4.修改学生信息\n");
	printf("******************************************** \n");
}

void list()
{
	int i=0;
	scanf_s("%d",&i);
	switch (i)
	{
		case 1:
		{
			printf("add\n");
			add_info();
			break;
		}
		case 2:
		{
			printf("delete\n");
			delete_info();
			break;
		}
		case 3:
		{
			printf("check\n");
			check_info();
			break;
		}
		case 4:
		{
			printf("modify\n");
			modify_info();
			break;
		}
	default:
		break;
	}
}

void add_info()
{
	char name[10]; //姓名
	int age;  //年龄
	char id[10]; //学生id
	int grade;  //年级 1/2/3/4
	int sort; //本科or研究生
	printf("请输入学生姓名:");
	scanf_s("%s",name,sizeof(name));

	printf("请输入学生年龄:");
	scanf_s("%d", &age);

	printf("请输入学生学号:");
	scanf_s("%s", &id,sizeof(id));

	printf("请输入学生年级(1/2/3/4):");
	scanf_s("%d", &grade);

	printf("该学生为本科生输入0,研究生输入1:");
	scanf_s("%d", &sort);
	
	/*创建动态结点,形成链表*/
	temp = (stu*)malloc(sizeof(stu));
	temp->next = NULL;
	strcpy_s(temp->stu_name, name);
	strcpy_s(temp->stu_id, id);
	temp->stu_age = age;
	temp->stu_grade = grade;
	temp->stu_sort = sort;
	Stu->next = temp;
	Stu = temp;
	
	printf("添加成功,继续添加请按1,返回主菜单请按2:\n");
	int exit;
	scanf_s("%d",&exit);
	if (exit == 1)
		add_info();
	else
		welcome();

}

void delete_info()
{
	char name[10];
	stu* p,*q;
	p = head->next;
	q = head;
	int flag = 0;
	printf("请输入需要删除信息的学生姓名:");
	scanf_s("%s",name,sizeof(name));
	while (p != NULL&&flag==0)
	{
		if (strcmp(p->stu_name, name)) //如果不匹配
		{
			q = p;   //q指向前一个位置
			p = p->next;
		}
		else  //匹配成功,找到要删除的学生
		{
			q->next = p->next;
			free(p);
			flag = 1;
			printf("删除成功\n");
		}
	}
	int exit;
	printf("继续删除请按1,返回主菜单请按2:");
	scanf_s("%d",&exit);
	if (exit == 1)
		delete_info();
	else if (exit == 2)
		welcome();
	
}

void check_info()
{
	stu* p;
	p = head->next;
	int swi;
	printf("1.查询全部学生\n");
	printf("2.精确查询\n");
	printf("3.模糊查询\n");
	scanf_s("%d", &swi);


	if (1 == swi) //查询全部学生
	{
		printf("姓名\t 学号\t 年龄\t 学历\t 年级\n");
		while (p != NULL)
		{
			printf("%s\t %s\t %d\t %d\t %d\n", p->stu_name, p->stu_id, p->stu_age, p->stu_sort, p->stu_grade);
			p = p->next;
		}

	}
	else if (2 == swi) //精确查询,不考虑同名的情况
	{
		char name[10];
		int flag1 = 0;
		//stu* q;
		//q = head->next;
		printf("输入学生姓名:");
		scanf_s("%s", &name, sizeof(name));
		while (p != NULL && flag1 == 0)
		{

			if (strcmp(name, p->stu_name) == 0)
			{
				printf("姓名\t 学号\t 年龄\t 学历\t 年级\n");
				printf("%s\t %s\t %d\t %d\t %d\n", p->stu_name, p->stu_id, p->stu_age, p->stu_sort, p->stu_grade);
				flag1 = 1;
			}
			else
				p = p->next;
		}
	}

	else if (3 == swi) //模糊查询
	{
		int flag2;
		printf("1.查询全部本科生\n");
		printf("2.查询全部研究生\n");
		scanf_s("%d", &flag2);

		if (1 == flag2)
		{
			printf("姓名\t 学号\t 年龄\t 学历\t 年级\n");
			while (p != NULL)
			{
				if (p->stu_sort == 0)
				{
					printf("%s\t %s\t %d\t %d\t %d\n", p->stu_name, p->stu_id, p->stu_age, p->stu_sort, p->stu_grade);
					p = p->next;
				}
				else
					p = p->next;
			}
			

		}
		if (2 == flag2)
		{
			printf("姓名\t 学号\t 年龄\t 学历\t 年级\n");
			while (p != NULL)
			{
				if (p->stu_sort == 1)
				{
					printf("%s\t %s\t %d\t %d\t %d\n", p->stu_name, p->stu_id, p->stu_age, p->stu_sort, p->stu_grade);
					p = p->next;
				}
				else
					p = p->next;
			}
			
			
		}
	
	}
	int exit;
	printf("继续查询请按1,返回主菜单请按2:");
	scanf_s("%d", &exit);
	if (exit == 1)
		check_info();
	else if (exit == 2)
		welcome();
}

void modify_info()  //此处没有考虑名字相同时候的情况
{
	int  age, sort, grade;
	char name[10], id[10];
	stu* p;
	p = head->next;
	printf("输入需要修改的学生姓名:");
	scanf_s("%s", &name, sizeof(name));
	while (p != NULL)
	{
		if (strcmp(name, p->stu_name)==0) //找到学生
		{
			int flag;
			printf("请输入需要修改的项目:");
			printf("1.学号\t2.年龄\t3.学历\t4.年级\n");
			scanf_s("%d", &flag);
			if (flag == 1)
			{
				printf("请输入新学号:");
				scanf_s("%s", id, sizeof(id));
				strcpy_s(p->stu_id, id);
				printf("更新成功\n");
			}
			else if (flag == 2)
			{
				printf("请输入新年龄:");
				scanf_s("%d", &age);
				p->stu_age = age;
				printf("更新成功\n");
			}
			else if (flag == 3)
			{
				printf("请输入新学历(0本科生/1研究生):");
				scanf_s("%d", &sort);
				p->stu_sort = sort;
				printf("更新成功\n");
			}
			else if (flag == 4)
			{
				printf("请输入新年级:");
				scanf_s("%d", &grade);
				p->stu_grade = grade;
				printf("更新成功\n");
			}
			break;
		}
		else
		{
			p = p->next;
			if (p == NULL)
				break;
		}
	}
	int exit;
	printf("继续修改请按1,返回主菜单请按2:");
	scanf_s("%d", &exit);
	if (exit == 1)
		modify_info();
	else if (exit == 2)
		welcome();
}

经过我的测试,以上程序粘贴复制后可以直接运行。

希望可以帮助刚入门的小伙伴,看完不妨点个赞吧,谢谢啦。

  • 11
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脑电信号要分类

你的鼓励是我创作的前进动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值