C/C++:学生管理系统(适合初学者)
程序员文章站
2024-02-29 12:00:46
...
今天趁着没事做想写一个简单的控制台程序——学生管理系统
相信很多接触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();
}
经过我的测试,以上程序粘贴复制后可以直接运行。
希望可以帮助刚入门的小伙伴,看完不妨点个赞吧,谢谢啦。