大一C语言结课设计之《学生信息管理系统》
第一次写这么长的程序,代码仅供參考,有问题请留言。
/*
** 学生信息管理系统
** IDE:Dev-Cpp 4.9.9.2
** 2014-6-15
*/ #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <vector>
using std::sort;
using std::vector; /*==存储单元节点==*/
struct student{
//字符数组方便统一输入
char name[50], address[100], email[50], id[20],
age[5], birth[20], tel[20], gender[5];
};
vector<student> myvec;
/*==========函数声明区==========*/ /*-打印主菜单声明-*/
void printMainMenu(); /*-主界面各函数声明-*/
void enterInformation(); //1
void browseInformation(); //2
void inquireInformation(); //3
void modifyInformation(); //4
void deleteInformation(); //5
void saveToFile(); //6
void readFromFile(); //7
void exitInformation(); //0 /*--主界面函数的子函数声明--*/
void inquireOneStudent(student *);
void modifyOneStudent(student *); /*--改动单项信息--*/
void modifyOneId(student *);
void modifyOneName(student *);
void modifyOneAge(student *);
void modifyOneGender(student *);
void modifyOneBirth(student *);
void modifyOneTel(student *);
void modifyOneAddress(student *);
void modifyOneEmail(student *);
void modifyToMain(student *); //这个事实上不须要形參,仅仅是为了统一跳转表接口 /*--删除一个学生--*/
void deleteOneStudent(student *); /*--显示一个学生的全部信息--*/
void displayOneStudent(student *); /*--浏览方式--*/
void browsePlain(); //直接浏览
void browseById();
void browseByName();
void browseByBirth();
void browseToMain(); /*--查询方式--*/
void inquireById();
void inquireByName(); /*-函数指针数组-*/
void (*mainPointerArr[])() = {
exitInformation, enterInformation,
browseInformation, inquireInformation,
modifyInformation, deleteInformation, saveToFile, readFromFile
}; void (*modifyOne[])(student *) = {
modifyToMain, modifyOneId, modifyOneName,
modifyOneAge, modifyOneGender, modifyOneBirth,
modifyOneTel, modifyOneAddress, modifyOneEmail
}; void (*browseArray[])() = {
browseToMain, browsePlain, browseById,
browseByName, browseByBirth
}; /*==========函数定义区==========*/ /*-主界面菜单函数-*/
void printMainMenu(){
printf("\t\t\t河南理工大学学生信息管理系统\n\n");
printf("\t\t ======================================\n");
printf("\t\t ||\t\t1、学生信息录入 \t||\n");
printf("\t\t ||\t\t2、学生信息浏览 \t||\n");
printf("\t\t ||\t\t3、学生信息查询 \t||\n");
printf("\t\t ||\t\t4、学生信息改动 \t||\n");
printf("\t\t ||\t\t5、学生信息删除 \t||\n");
printf("\t\t ||\t\t6、学生信息存档 \t||\n");
printf("\t\t ||\t\t7、学生信息读档 \t||\n");
printf("\t\t ||\t\t0、退出管理系统 \t||\n");
printf("\t\t ======================================\n");
printf("\t\t\t\t\t\t原创作者:邱正钢\n");
printf("\t\t\t\t\t\t完毕时间:2014年6月17日\n");
printf("\t\t\t\t\t\tEmail:2276479303@qq.com\n");
printf("请选择功能:");
int num;
scanf("%d", &num);
(*mainPointerArr[num])();
} /*-信息录入-*/
void enterInformation(){ //1
system("cls");
printf("输入学生信息:\n");
printf("请输入学号:");
int len; student temp;
while(gets(temp.id) && !strlen(temp.id))
; //过滤缓存回车
printf("请输入姓名:");
while(gets(temp.name) && !strlen(temp.name))
; //过滤缓存回车
printf("请输入年龄:");
while(gets(temp.age) && !strlen(temp.age))
; //过滤缓存回车
printf("请输入性别:");
while(gets(temp.gender) && !strlen(temp.gender))
; //过滤缓存回车
printf("请输入生日:");
while(gets(temp.birth) && !strlen(temp.birth))
; //过滤缓存回车
printf("请输入电话:");
while(gets(temp.tel) && !strlen(temp.tel))
; //过滤缓存回车
printf("请输入地址:");
while(gets(temp.address) && !strlen(temp.address))
; //过滤缓存回车
printf("请输入Email:");
while(gets(temp.email) && !strlen(temp.email))
; //过滤缓存回车
myvec.push_back(temp);
system("cls");
printf("OK,录入成功,该学生信息例如以下:\n");
len = myvec.size() - 1;
inquireOneStudent(&myvec[len]);
} void browseInformation(){ //2
if(myvec.empty()){
printf("没有检測到不论什么学生信息!请在录入后再浏览!\n系统将返回到主界面\n");
system("pause");
browseToMain();
}
printf("请选择功能:\n");
printf("1、直接浏览\n");
printf("2、按学号排序后浏览\n");
printf("3、按姓名排序后浏览\n");
printf("4、按生日排序后浏览\n");
printf("0、返回主菜单\n");
int num; scanf("%d", &num);
(*browseArray[num])();
browseInformation();
} void inquireInformation(){ //3
if(myvec.empty()){
printf("没有数据,无法查询!系统将退到主菜单\n");
system("pause");
browseToMain();
return;
}
printf("请选择功能:");
printf("1、输入学号查询\n");
printf("2、输入姓名查询\n");
printf("0、返回主菜单\n");
int num; scanf("%d", &num);
if(num == 1) inquireById();
else if(num == 2) inquireByName();
system("pause");
browseToMain();
} void modifyInformation(){ //4
printf("请输入要更改的学生学号:");
char buf[20];
while(gets(buf), !strlen(buf))
; //依旧是过滤空串
vector<student>::iterator it = myvec.begin();
for( ; it != myvec.end(); ++it){
if(strcmp(buf, it->id) == 0){
modifyOneStudent(&myvec[it - myvec.begin()]);
return;
}
}
printf("没有找到!\n");
}
void deleteInformation(){ //5
if(myvec.empty()){
printf("没有数据可供删除,系统将返回到主菜单。\n");
system("pause");
browseToMain();
return;
}
printf("请选择功能:\n");
printf("1、清空全部数据\n");
printf("2、删除特定学生的信息\n");
printf("0、返回主菜单\n");
int num; scanf("%d", &num);
if(1 == num){
myvec.clear();
printf("成功清除全部信息\n");
return;
}else if(2 == num){
char buf[20];
printf("请输入学生学号:");
while(gets(buf), !strlen(buf))
;
vector<student>::iterator it = myvec.begin();
for( ; it != myvec.end(); ++it){
if(!strcmp(buf, it->id)){
deleteOneStudent(&myvec[it - myvec.begin()]); return;
}
}
printf("未找到该学生!\n");
}
system("pause");
browseToMain();
}
void saveToFile(){ //6
if(myvec.empty()){
printf("数据为空,无法存储,请在录入信息后再存储到文件!系统将返回到主菜单!\n");
system("pause");
browseToMain();
return;
}
FILE *fp = fopen("studentInformation.txt", "w");
vector<student>::iterator it = myvec.begin();
for( ; it < myvec.end(); ++it){
fprintf(fp, "%s\n", it->id);
fprintf(fp, "%s\n", it->name);
fprintf(fp, "%s\n", it->age);
fprintf(fp, "%s\n", it->gender);
fprintf(fp, "%s\n", it->birth);
fprintf(fp, "%s\n", it->tel);
fprintf(fp, "%s\n", it->address);
fprintf(fp, "%s\n", it->email);
}
fclose(fp);
printf("OK, 存档完毕!系统将返回到主界面。\n");
system("pause"); browseToMain();
}
void readFromFile(){ //7
FILE *fp = fopen("studentInformation.txt", "rb");
if(fp == NULL){
printf("未检測到存档文件!系统将返回到主界面。\n");
system("pause");
browseToMain();
return;
}
student it;
myvec.clear();
while(fscanf(fp, "%s", it.id) == 1){
fscanf(fp, "%s", it.name);
fscanf(fp, "%s", it.age);
fscanf(fp, "%s", it.gender);
fscanf(fp, "%s", it.birth);
fscanf(fp, "%s", it.tel);
fscanf(fp, "%s", it.address);
fscanf(fp, "%s", it.email); myvec.push_back(it);
}
fclose(fp);
if(myvec.empty()){
printf("读取存档失败!系统将返回到主界面!\n");
}else{
printf("读取存档成功!系统将返回到主界面!\n");
}
system("pause");
browseToMain();
}
void exitInformation(){ //0
printf("感谢您的使用!再见\n");
system("pause");
exit(EXIT_SUCCESS);
} void displayOneStudent(student *stu){
printf("*****************************\n");
printf("学号:%s\n", stu->id);
printf("姓名:%s\n", stu->name);
printf("年龄:%s\n", stu->age);
printf("性别:%s\n", stu->gender);
printf("生日:%s\n", stu->birth);
printf("电话:%s\n", stu->tel);
printf("地址:%s\n", stu->address);
printf("Email:%s\n", stu->email);
printf("*****************************\n");
}
void inquireOneStudent(student *stu){
displayOneStudent(stu);
printf("请选择操作:\n");
printf("1、更改该学生信息\n");
printf("2、删除该学生信息\n");
printf("0、返回主菜单\n");
int num;
label: scanf("%d", &num);
if(num == 1) modifyOneStudent(stu);
else if(num == 2) deleteOneStudent(stu);
else if(num == 0) modifyToMain(stu);
else goto label;
} void modifyOneStudent(student *stu){
system("cls");
printf("改动当前学生信息:\n");
printf("1、改动学号\n");
printf("2、改动姓名\n");
printf("3、改动年龄\n");
printf("4、改动性别\n");
printf("5、改动生日\n");
printf("6、改动电话\n");
printf("7、改动地址\n");
printf("8、改动Email\n");
printf("0、返回主菜单\n");
int num; scanf("%d", &num);
(*modifyOne[num])(stu);
} void modifyOneId(student *stu){
printf("请输入新的学号:");
while(gets(stu->id) && !strlen(stu->id))
; //过滤缓存回车
printf("改动成功!更改后的学生信息例如以下:\n");
inquireOneStudent(stu);
}
void modifyOneName(student *stu){
printf("请输入新的姓名:");
while(gets(stu->name) && !strlen(stu->name))
; //过滤缓存回车
printf("改动成功!更改后的学生信息例如以下:\n");
inquireOneStudent(stu);
}
void modifyOneAge(student *stu){
printf("请输入新的年龄:");
while(gets(stu->age) && !strlen(stu->age))
; //过滤缓存回车
printf("改动成功!更改后的学生信息例如以下:\n");
inquireOneStudent(stu);
}
void modifyOneGender(student *stu){
printf("请输入新的性别:");
while(gets(stu->gender) && !strlen(stu->gender))
; //过滤缓存回车
printf("改动成功!更改后的学生信息例如以下:\n");
inquireOneStudent(stu);
}
void modifyOneBirth(student *stu){
printf("请输入新的生日:");
while(gets(stu->birth) && !strlen(stu->birth))
; //过滤缓存回车
printf("改动成功!更改后的学生信息例如以下:\n");
inquireOneStudent(stu);
}
void modifyOneTel(student *stu){
printf("请输入新的电话:");
while(gets(stu->tel) && !strlen(stu->tel))
; //过滤缓存回车
printf("改动成功!更改后的学生信息例如以下:\n");
inquireOneStudent(stu);
}
void modifyOneAddress(student *stu){
printf("请输入新的地址:");
while(gets(stu->address) && !strlen(stu->address))
; //过滤缓存回车
printf("改动成功!更改后的学生信息例如以下:\n");
inquireOneStudent(stu);
}
void modifyOneEmail(student *stu){
printf("请输入新的Email:");
while(gets(stu->email) && !strlen(stu->email))
; //过滤缓存回车
printf("改动成功!更改后的学生信息例如以下:\n");
inquireOneStudent(stu);
}
void modifyToMain(student *stu){
system("cls");
printMainMenu();
} void deleteOneStudent(student *stu){
vector<student>::iterator it;
it = myvec.begin() + (stu - &myvec[0]);
myvec.erase(it);
printf("删除成功!\n");
} /*--cmp函数定义--*/
bool cmpById(student a, student b){
if(strcmp(a.id, b.id) < 0) return true;
}
bool cmpByName(student a, student b){
if(strcmp(a.name, b.name) < 0) return true;
}
bool cmpByBirth(student a, student b){
if(strcmp(a.birth, b.birth) < 0) return true;
} /*--浏览方式--*/
void browsePlain(){ //直接浏览
if(myvec.empty()){
printf("数据为空!将返回主菜单。\n");
system("pause");
modifyToMain(NULL);
}
vector<student>::iterator stu = myvec.begin();
for( ; stu != myvec.end(); ++stu)
displayOneStudent(&myvec[stu - myvec.begin()]);
}
void browseById(){
if(myvec.empty()){
printf("数据为空!将返回主菜单。\n");
system("pause");
modifyToMain(NULL);
}
sort(myvec.begin(), myvec.end(), cmpById);
vector<student>::iterator stu = myvec.begin();
for( ; stu != myvec.end(); ++stu)
displayOneStudent(&myvec[stu - myvec.begin()]);
}
void browseByName(){
if(myvec.empty()){
printf("数据为空!将返回主菜单。\n");
system("pause");
modifyToMain(NULL);
}
sort(myvec.begin(), myvec.end(), cmpByName);
vector<student>::iterator stu = myvec.begin();
for( ; stu != myvec.end(); ++stu)
displayOneStudent(&myvec[stu - myvec.begin()]);
}
void browseByBirth(){
if(myvec.empty()){
printf("数据为空!将返回主菜单。\n");
system("pause");
modifyToMain(NULL);
}
sort(myvec.begin(), myvec.end(), cmpByBirth);
vector<student>::iterator stu = myvec.begin();
for( ; stu != myvec.end(); ++stu)
displayOneStudent(&myvec[stu - myvec.begin()]);
}
void browseToMain(){
system("cls");
printMainMenu();
} /*--查询方式--*/
void inquireById(){
printf("请输入要查询的学生学号:");
char buf[20]; int ok = 0;
while(gets(buf), !strlen(buf))
; //依旧是过滤空串
vector<student>::iterator it = myvec.begin();
for( ; it != myvec.end(); ++it){
if(strcmp(buf, it->id) == 0){
displayOneStudent(&myvec[it - myvec.begin()]);
ok = 1;
}
}
if(0 == ok) printf("没有找到!\n");
} void inquireByName(){
printf("请输入要查询的学生姓名:");
char buf[20]; int ok = 0;
while(gets(buf), !strlen(buf))
; //依旧是过滤空串
vector<student>::iterator it = myvec.begin();
for( ; it != myvec.end(); ++it){
if(strcmp(buf, it->name) == 0){
displayOneStudent(&myvec[it - myvec.begin()]);
ok = 1;
}
}
if(0 == ok) printf("没有找到!\n");
} /*==========主函数==========*/
int main(){
printMainMenu();
return 0;
}
大一C语言结课设计之《学生信息管理系统》的更多相关文章
- 大一C语言结课设计之《简单计算器》
/*===============================================*\ ** 设计目的:简单计算器,计算形如10*(20.2-30.6)+5.0/2的表达式值 ** 简 ...
- 这是C语言结课前(期末考试之前)写给牛晓霞的一封信!
致尊敬的牛晓霞老师: 这是黄领衫的感想,也是想告诉你的话! 在老师说要给班里写得好的人发黄领衫的时候,我当时的想法是我很有可能拿到这份奖品的,怎么说呢,算是一种自信吧,或是对自己的态度的认可.虽然我能 ...
- 留念 C语言第一课简单的计算器制作
留念 C语言第一课简单的计算器制作 学C语言这么久了. /* 留念 C语言第一课简单的计算器制作 */ #include<stdio.h> #include<stdlib.h ...
- 简单的C语言小学四则运算设计
题目:设计一个简单的四则运算编辑器 思路:我使用的是C语言编程,看到题目首先要随机出3个随机数,其中两个为100以内的随机数(a,b),一个为0~3的随机数(k). k值的变化使得+ - * /的变化 ...
- 简单计算器 (c语言课程设计)
可以实现简单的加减乘除四则运算 #include<stdio.h> #include<string.h> #define MAX 10100 int main() { int ...
- OO结课了,狂喜
OO结课了,狂喜 哈哈哈哈哈 哈哈哈 哈哈 哈 第十三次作业 UML类图 简要分析: 本次作业是对UML类图进行解析,给到的接口里面已经有了很多类了,但是自带的类肯定是没有反应这些类的结构的.所以就自 ...
- OO Unit4总结 & 结课总结
OO Unit4总结 & 结课总结 OO课Unit4 UML解析应用技术回顾 BUAA.1823.邓新宇 2020/6/19 总结本单元三次作业的架构设计 本单元的架构设计主要是两方面. 一方 ...
- C语言程序设计课程设计自查表格
课程设计自查表格 序号 项目 完成与否(完成打勾) 1 格式是否符合标准(缩进是否规范) 2 是否模块化设计(使用函数分解系统功能) 3 函数名否易懂(不得使用f1(int a1,int a2)这样的 ...
- ShoneSharp语言(S#)的设计和使用介绍系列(1)— 开篇
ShoneSharp语言(S#)的设计和使用介绍 系列(1)- 开篇 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/ShoneSharp. 一 ...
随机推荐
- 2014搜狗前端面经【A事业部】
刚刚面完搜狗,有种莫名其妙的感觉,哪里莫名其妙呢?听我慢慢道来... 开始面试官就这简历,问了一些有的没的东西,都不深(好吧我承认之前的经历有点菜,没神马加分项啊). 后面开始技术面: 知识点1:JS ...
- VS2010安装EntityFramework5.0
EntityFramework 当前最新版本是6.0,2012年10月份发布,不过是alpha1版本,稳定版本是8月份发布的5.0版本,对于初学者来说,还是别在测试版上折腾了,先学习稳定的5.0版本, ...
- NServiceBus-架构的原则
自主性和松散耦合在设计时和运行时都是没有的事,任何技术都可以给你. 面向服务的架构(SOA)和事件驱动的体系结构提供了依据识别使用nservicebus. 战略领域驱动设计有助于弥合业务/IT鸿沟和驱 ...
- 微信企业支付--遇到不明确结果的err_code:SYSTEMERROR,NOT_FOUND
前提 项目开发中实现微信提现的功能.使用到了两个接口 企业付款接口:https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfer ...
- searchDisplayController 时引起的数组越界
当 [searchDisplayController.searchResultsTableView setSeparatorStyle:UITableViewCellSeparatorStyleNo ...
- linux下使用libiconv库转码
iconv命令实现linux下字符集编码的转换 windows下的文件复制到linux下时常会乱码,因为windows下文件编码为GBK,linux下默认文件编码为UTF-8,故需要libiconv库 ...
- 转】MyEclipse使用总结——MyEclipse中配置WebLogic12c服务器
原博文出自于:http://www.cnblogs.com/xdp-gacl/p/4142495.html 感谢! MyEclipse中配置WebLogic12c服务器的步骤如下: [Window]→ ...
- vim显示历史命令
[vim显示历史命令] q: 进入命令历史编辑.类似的还有 q/ 可以进入搜索历史编辑.注意 q 后面如果跟随其它字母,是进入命令记录. 可以像编辑缓冲区一样编辑某个命令,然后回车执行.也可以用 ct ...
- 给Adobe Reader添加书签功能
Adobe Acrobat Professional和Adobe Reader都是Adobe公司的产品.前者用来编辑制作PDF文档,后者只能用来阅读PDF.令人郁闷的是Adobe Reader中虽然有 ...
- How Tomcat Works(八)
下面接着分析Context容器,该接口最重要的方法是addWrapper()方法与creatWrapper()方法,添加具体的子容器,这里是Wrapper容器实例 这里要分析的是一个简单的Contex ...