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

    技术2024-10-22  11

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

    相信很多接触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(); }

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

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

    Processed: 0.015, SQL: 9