第一次写这么长的程序,代码仅供參考,有问题请留言。

/*
** 学生信息管理系统
** 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语言结课设计之《学生信息管理系统》的更多相关文章

  1. 大一C语言结课设计之《简单计算器》

    /*===============================================*\ ** 设计目的:简单计算器,计算形如10*(20.2-30.6)+5.0/2的表达式值 ** 简 ...

  2. 这是C语言结课前(期末考试之前)写给牛晓霞的一封信!

    致尊敬的牛晓霞老师: 这是黄领衫的感想,也是想告诉你的话! 在老师说要给班里写得好的人发黄领衫的时候,我当时的想法是我很有可能拿到这份奖品的,怎么说呢,算是一种自信吧,或是对自己的态度的认可.虽然我能 ...

  3. 留念 C语言第一课简单的计算器制作

    留念 C语言第一课简单的计算器制作 学C语言这么久了.  /* 留念 C语言第一课简单的计算器制作 */   #include<stdio.h>  #include<stdlib.h ...

  4. 简单的C语言小学四则运算设计

    题目:设计一个简单的四则运算编辑器 思路:我使用的是C语言编程,看到题目首先要随机出3个随机数,其中两个为100以内的随机数(a,b),一个为0~3的随机数(k). k值的变化使得+ - * /的变化 ...

  5. 简单计算器 (c语言课程设计)

    可以实现简单的加减乘除四则运算 #include<stdio.h> #include<string.h> #define MAX 10100 int main() { int ...

  6. OO结课了,狂喜

    OO结课了,狂喜 哈哈哈哈哈 哈哈哈 哈哈 哈 第十三次作业 UML类图 简要分析: 本次作业是对UML类图进行解析,给到的接口里面已经有了很多类了,但是自带的类肯定是没有反应这些类的结构的.所以就自 ...

  7. OO Unit4总结 & 结课总结

    OO Unit4总结 & 结课总结 OO课Unit4 UML解析应用技术回顾 BUAA.1823.邓新宇 2020/6/19 总结本单元三次作业的架构设计 本单元的架构设计主要是两方面. 一方 ...

  8. C语言程序设计课程设计自查表格

    课程设计自查表格 序号 项目 完成与否(完成打勾) 1 格式是否符合标准(缩进是否规范) 2 是否模块化设计(使用函数分解系统功能) 3 函数名否易懂(不得使用f1(int a1,int a2)这样的 ...

  9. ShoneSharp语言(S#)的设计和使用介绍系列(1)— 开篇

    ShoneSharp语言(S#)的设计和使用介绍 系列(1)- 开篇 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/ShoneSharp. 一 ...

随机推荐

  1. 【IDE】SharpDevelop

    SharpDevelop 这个轻型的开发工具支持多种程序语言,包括C#.java以及VB.NET,同时还支持多种语言界面,象任何爱好者开发的工具一样.这个编辑器的界面风格类似于Office XP以及V ...

  2. 把一个序列转换成非严格递增序列的最小花费 POJ 3666

    //把一个序列转换成非严格递增序列的最小花费 POJ 3666 //dp[i][j]:把第i个数转成第j小的数,最小花费 #include <iostream> #include < ...

  3. Winsock IO模型之select模型

    之所以称其为select模型是因为它主要是使用select函数来管理I/O的.这个模型的设计源于UNIX系统,目的是允许那些想要避免在套接字调用上阻塞的应用程序有能力管理多个套接字. int sele ...

  4. arp spoofing

    Today our tutorial will talk about Kali Linux Man in the Middle Attack. How to perform man in the mi ...

  5. U盘安装RedHat 5.3

    转载自http://www.cnblogs.com/totozlj/archive/2012/06/03/2532757.html 1.下载rhel-5.3-server-i386-dvd.iso文件 ...

  6. C++的引用类型的变量到底占不占用内存空间?

    ——by  karottc 分析一下 C++ 里面的引用类型(例如: int &r = a;  )中的 r 变量是否占用内存空间呢?是否和  int *p = &a;  中的 p 变量 ...

  7. Java(jdk1.7) 陷阱

    String[] strA = new String[4]; for(int i=0; i<4; i++) { strA[i] = String.valueOf(i); } strA[0] = ...

  8. iOS9对SDK的影响(iOS9适配必看)

      1.大部分社交平台接口不支持https协议. 问题描述:在iOS9下,系统默认会拦截对http协议接口的访问,因此无法获取http协议接口的数据.对ShareSDK来说,具体表现可能是,无法授权. ...

  9. 省时的浏览器同步测试工具 browsersync NodeJS

    http://www.browsersync.cn/ 省时的浏览器同步测试工具 Browsersync能让浏览器实时.快速响应您的文件更改(html.js.css.sass.less等)并自动刷新页面 ...

  10. 轻松学习Linux之自动执行任务

    在 Linux 中,任务可以被配置在指定的时间段.指定的日期.或系统平均载量低于指定的数量时自动运行,系统管理员可使用自动化的任务来执行定期备份.监控系统.运行定制脚本等,往往初学者都是win用户,习 ...