C语言简易学生管理系统(含源码)
项目部分截图:
以下是完整源代码 ;
cpp文件:
#include "StudentManagerSystem.h"int main() {//改变控制台字体颜色 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);int num;while (1) {welcome();scanf("%d", &num);switch (num) {case 1: //录入学生信息InputStudent();break;case 2: //打印学生信息PrintStudent();break;case 3: //保存学生信息SaveStudent();break;case 4: //读取学生信息ReadStudent();break;case 5: //统计所有学生人数CountStudent();break;case 6: //查找学生信息FindStudent();break;case 7: //修改学生信息ModifyStudent();break;case 8: //删除学生信息DeleteStudent();break;case 9: //退出系统return 0;}}return 0;
}
头文件:
#pragma once
#include<bits/stdc++.h>
#include <windows.h>
using namespace std;//每操作完一次就要清空屏幕
void cleanScreen() {system("pause"); //暂停system("cls"); //清空屏幕
}//欢迎界面
void welcome() {printf("*************************************************\n");printf("\t\t欢迎使用学生管理系统\t\t\t\n");printf("*************************************************\n");printf("*\t\t请选择功能列表\t\t\t*\n");printf("*************************************************\n");printf("*\t\t1.录入学生信息\t\t\t*\n");printf("*\t\t2.打印学生信息\t\t\t*\n");printf("*\t\t3.保存学生信息\t\t\t*\n");printf("*\t\t4.读取学生信息\t\t\t*\n");printf("*\t\t5.统计所有学生人数\t\t*\n");printf("*\t\t6.查找学生信息\t\t\t*\n");printf("*\t\t7.修改学生信息\t\t\t*\n");printf("*\t\t8.删除学生信息\t\t\t*\n");printf("*\t\t9.退出系统\t\t\t*\n");printf("\n");
}typedef struct student {char name[30]; //名字int age; //年龄long long stuNum; //学号int score; //分数
}Student;typedef struct _Node {Student stu;struct _Node* pNext;
}Node;Node* g_pHead = NULL; //初始化头指针//录入学生信息
void InputStudent() {Node* pNewNode = (Node*)malloc(sizeof(Node)); //注意这边是(sizeof(Node)),而不是sizeof(Node*)!!!pNewNode->pNext = NULL;//头插法if (g_pHead == NULL) {g_pHead = pNewNode;}else {pNewNode->pNext = g_pHead;g_pHead = pNewNode;}//输入数据printf("请输入学生信息:\n");printf("输入姓名:\n");scanf("%s", pNewNode->stu.name);printf("输入年龄:\n");scanf("%d", &pNewNode->stu.age);printf("输入学号:\n");scanf("%lld", &pNewNode->stu.stuNum);printf("输入分数:\n");scanf("%d", &pNewNode->stu.score);printf("学生信息录入成功!\n");cleanScreen();
}//输出学生信息
void PrintStudent() {Node* p = g_pHead;printf("*************************************************\n");printf("学号\t\t姓名\t\t年龄\t\t分数\n");while (p != NULL) { printf("%-16lld", p->stu.stuNum);printf("%-16s", p->stu.name);printf("%-16d", p->stu.age);printf("%-16d\n", p->stu.score);p = p->pNext; }cleanScreen();
}//保存学生信息
void SaveStudent() {//打开文件FILE* fp = fopen("C:\\Users\\14185\\Desktop\\stuinfo.dat", "w");if (fp == NULL) {printf("文件打开失败\n");return;}//将数据写入文件(遍历链表)Node* p = g_pHead;while (p != NULL) {fwrite(&p->stu, 1, sizeof(Student), fp);p = p->pNext;}//关闭文件fclose(fp);printf("数据保存成功!\n");cleanScreen();
}//读取文件中的数据
void ReadStudent() {FILE* fp = fopen("C:\\Users\\14185\\Desktop\\stuinfo.dat", "r");if (fp == NULL) {printf("读取文件失败!\n");return;}Student stu;while (fread(&stu, 1, sizeof(Student), fp)) {Node* pNewNode = (Node*)malloc(sizeof(Node));pNewNode->pNext = NULL;memcpy(pNewNode, &stu, sizeof(Student));if (g_pHead == NULL) {g_pHead = pNewNode;}else {pNewNode->pNext = g_pHead;g_pHead = pNewNode;}fclose(fp);printf("文件读取成功!\n");cleanScreen();}
}
//统计所有学生人数
void CountStudent() {int cnt = 0;Node* p = g_pHead;while (p != NULL) {++cnt;p = p->pNext;}printf("学生的总人数为:%d\n", cnt);cleanScreen();
}//查找学生
void FindStudent() {long long stuNum; //学号printf("请输入需要查找学生的学号:\n");scanf("%lld", &stuNum);Node* p = g_pHead;while (p != NULL) {if (p->stu.stuNum == stuNum) {printf("学号:%lld 姓名:%s 年龄:%d 分数:%d\n",p->stu.stuNum, p->stu.name, p->stu.age, p->stu.score);cleanScreen();return;}p = p->pNext;}printf("没有找到相关学生信息。\n");cleanScreen();
}//修改学生信息
void ModifyStudent() {printf("请输入需要修改学生信息的学号:\n");long long stuNum;scanf("%lld", &stuNum);Node* p = g_pHead;while (p != NULL) {if (p->stu.stuNum == stuNum) {printf("请输入修改后的信息(学号/姓名/年龄/分数):\n");scanf("%lld %s %d %d", &p->stu.stuNum, p->stu.name, &p->stu.age, &p->stu.score);cleanScreen();return;}p = p->pNext;}printf("没有找到学生信息。\n");cleanScreen();
}//删除学生信息
void DeleteStudent() {printf("请输入需要删除的学生信息的学号:\n");long long stuNum;scanf("%lld", &stuNum);Node* p1, *p2; //注意这里p2前面也要加星号!//如果一开始链表为空if (g_pHead == NULL) {printf("没有找到学生信息。\n");cleanScreen();return;}//如果要删除的点正好是头结点if (g_pHead->stu.stuNum == stuNum) {p1 = g_pHead;g_pHead = g_pHead->pNext;free(p1);printf("删除成功!\n");cleanScreen();return;}//要删除的点位于中间位置Node* p = g_pHead;while (p->pNext != NULL) {if (p->pNext->stu.stuNum == stuNum) {p2 = p->pNext;p->pNext = p->pNext->pNext;free(p2);printf("删除成功!\n");cleanScreen();return;}}printf("没有找到学生信息。\n");cleanScreen();return;
}
C语言简易学生管理系统(含源码)相关推荐
- java毕业设计高校学生管理系统mybatis+源码+调试部署+系统+数据库+lw
java毕业设计高校学生管理系统mybatis+源码+调试部署+系统+数据库+lw java毕业设计高校学生管理系统mybatis+源码+调试部署+系统+数据库+lw 本源码技术栈: 项目架构:B/S ...
- 软件工程通信录管理系统c语言,软件工程设计管理系统附源码.doc
软件工程设计管理系统附源码 学 年 设 计 课程名称: 软件工程学年设计 实验项目: 通讯录管理系统 姓 名: XXX 专 业: 计算机科学与技术 班 级: XXX班 学 号: XXX 指导教师 XX ...
- Java学生成绩管理系统(含源码+论文+答辩PPT等)
该项目采用技术JSP.Servlet.jdbc.Tomcat服务器.MySQL数据库 ,项目含有源码.论文.配套开发软件.软件安装教程.项目发布教程 下面是系统运行起来后的部分截图:
- 语言学生学籍管理系统流程图_基于C语言的学生管理系统(含文件)(一)
"点击上方"蓝色字",关注我们哦(*^▽^*)!" NO.1 篇幅较长,请空闲时观看 前言 这个项目是大一暑假完成,纯C语言编写,界面比较美观,由于当时还是一个 ...
- 毕设项目 Spring Boot毕业设计管理系统(含源码+论文)
文章目录 1 项目简介 2 实现效果 2.1 界面展示 3 设计方案 3.1 概述 3.2 系统流程 3.2.1 系统开发流程 3.3.2 教师登录流程 3.3.3 系统操作流程 3.3 系统结构设计 ...
- 微信小程序之教学管理系统(含源码+论文+答辩PPT等)
项目功能简介: 该项目含有源码.论文等资料.配套开发软件.软件安装教程.项目发布教程等 本系统包含微信小程序做的教学管理系统前台和Java做的后台管理系统: 微信小程序--教学管理系统前台涉及技术:W ...
- Java SSM毕设 勤工助学管理系统(含源码+论文)
文章目录 1 项目简介 2 实现效果 2.1 界面展示 3 设计方案 3.1 概述 3.2 系统流程 3.2.1 系统操作流程 3.2.2 信息添加流程 3.2.3 信息删除流程 3.3 系统结构设计 ...
- 毕设springBoot+vue 勤工助学管理系统(含源码+论文)
文章目录 1 项目简介 2 实现效果 2.1 界面展示 3 设计方案 3.1 概述 3.2 系统流程 3.2.1 系统操作流程 3.2.2 信息添加流程 3.2.3 信息删除流程 3.3 系统结构设计 ...
- java毕业设计 Vue勤工助学管理系统(含源码+论文)
文章目录 1 项目简介 2 实现效果 2.1 界面展示 3 设计方案 3.1 概述 3.2 系统流程 3.2.1 系统操作流程 3.2.2 信息添加流程 3.2.3 信息删除流程 3.3 系统结构设计 ...
- 微信小程序之考勤签到管理系统(含源码+论文+答辩PPT等)
项目功能简介: 该项目含有源码.论文等资料.配套开发软件.软件安装教程.项目发布教程等 本系统包含微信小程序做的考勤前台和Java做的后台管理系统: 微信小程序--考勤前台涉及技术:WXML 和 WX ...
最新文章
- tcptracerte参数_探究 wireshark 的 tcptrace 时序图
- 你知道Spring是怎么解析配置类的吗?
- PMCAFF微分享 | 供应链金融套利套汇介绍
- 斥资2亿加码新消费,“瓜子之王”洽洽要圆“坚果梦”?
- virtualenv在ubuntu系统中的缺点
- 中国大学mooc慕课python语言程序设计答案_中国大学MOOC(慕课)_Python语言程序设计基础_网课答案...
- 剑指offer-3(替换空格)
- Windows2003下DHCP服务器备份、还原、迁移、绑定
- oracle liunx 6.5安装目录,linux redhat 6.5 多路径配置
- 话说P2P理财纷纷暴雷之后,那些投资者的钱去了哪里?
- oracle 查询脚本分析,一个oracle数据查询脚本
- Matlab图像识别/检索系列(8)—开源工具介绍之vlfeat
- 如何做项目总结与汇报
- Java实现验证码制作
- 命令行运行ktr和kjb
- s71500技术手册_SIMATIC S7-1500 PLC用户手册
- 二维C语言,二维FFT,IFFT,c语言实现
- 什么造就了中国的XP系统依赖症
- 刚子:走马观花奋达创“芯”发布会
- windows命令行关闭已占用的端口
热门文章
- Antelope 和Barracuda区别
- javax.persistence.TransactionRequiredException: No transactional EntityManager available
- 转: Protobuf 的 proto3 与 proto2 的区别
- 多线程Thread和Runnable
- 【转】Gnuplot基本介绍
- EXTJS4:如何改变grid某一个单元格的背景颜色
- 将PowerPCB 中的pcb文件导入到Protel中使用
- [hadoop源码阅读][0]-初衷和各种资源
- ios开发笔记之 emoji表情字符编码集合
- M8的USB工作模式切换工具