学生信息管理系统设计
【功能要求】
学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail
等。试设计一学生信息管理系统,使之能提供以下功能:
(1)系统以菜单方式工作
(2)学生信息录入功能(学生信息用文件保存)---输入
(3)学生信息浏览功能---输出
(4)查询、排序功能---算法
按学号查询
按姓名查询
按性别分类排序
按年龄分类统计
(5)学生信息的删除与修改
(6)采用顺序和链式两种存储方式
链表储存:
#链表
#include<iostream>
#include<string>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<fstream>
using namespace std;
int k=1;
typedef struct {
string name;
string no;//学号
string xb;
int age;
long long birth;//出生年月
string add;//地址
long long phone;//电话
string email;//电子邮箱
} student;
typedef struct lnode {//链表的定义
student data; //存放学生信息的数据域
struct lnode *next = 0;// 指向下个学生信息的指针域
} lnode, *linklist;
void initlist(linklist &l) {//初始化链表
l = new lnode;
l->next = NULL;
}
void help() { //帮助
printf("\n 0.欢迎使用系统帮助!\n");
printf("\n 1.初次进入系统后,请先选择增加学生信息;\n");
printf("\n 2.按照菜单提示键入数字代号;\n");
printf("\n 3.增加学生信息后,切记保存;\n");
printf("\n 4.谢谢您的使用!\n");
system("pause");
system("cls");
}
void sort(linklist &l)//对学号排序
{
lnode *p, *k;
p = l->next;
string s1;
int a;
long long b;
while(p){
k=p;
while (k->next != NULL) {
k = k->next;
if (p->data.no > k->data.no) {
s1 = p->data.name;
p->data.name = k->data.name;
k->data.name = s1;
s1 = p->data.no;
p->data.no = k->data.no;
k->data.no = s1;
s1 = p->data.xb;
p->data.xb = k->data.xb;
k->data.xb = s1;
a = p->data.age;
p->data.age = k->data.age;
k->data.age = a;
b = p->data.birth;
p->data.birth = k->data.birth;
k->data.birth = b;
b = p->data.phone;
p->data.phone = k->data.phone;
k->data.phone = b;
s1 = p->data.add;
p->data.add = k->data.add;
k->data.add = s1;
s1 = p->data.email;
p->data.email = k->data.email;
k->data.email = s1;
}
}
p = p->next;
}
}
int totallist(linklist &l){//学生总数
lnode *p;
p=l->next;
int i=0;
while(p){
i++;
p=p->next;
}
return i;
}
void insertlist(linklist &l){//末尾处插入学生信息
int length=totallist(l),n;
lnode *p,*r;
r=l;
int j=0;
while(r&&j<length){
r=r->next;
j++;
}
if(r){
cout<<"请输入增加学生个数:"<<endl;
cin>>n;
for (int i = 0; i < n; i++) {
p = new lnode;
cout << "请输入第" << i + 1 << "个学生的学号" << endl;
cin >> p->data.no;
cout << "请输入第" << i + 1 << "个学生的姓名" << endl;
cin >> p->data.name;
cout << "请输入第" << i + 1 << "个学生的年龄" << endl;
cin >> p->data.age;
cout << "请输入第" << i + 1 << "个学生的性别" << endl;
cin >> p->data.xb;
cout << "请输入第" << i + 1 << "个学生的出生年月" << endl;
cin >> p->data.birth;
cout << "请输入第" << i + 1 << "个学生的地址" << endl;
cin >> p->data.add;
cout << "请输入第" << i + 1 << "个学生的电话" << endl;
cin >> p->data.phone;
cout << "请输入第" << i + 1 << "个学生的email" << endl;
cin >> p->data.email;
p->next = NULL;
r->next = p;
r = p;
}
}
else
cout<<"插入失败"<<endl;
sort(l);
}
void preserve(linklist &l){//将学生数据保存至文件中
FILE* fp;
lnode *p;
p = l->next;
if ((fp = fopen("学生信息管理", "w+")) == NULL) {
printf("打开失败");
exit(-1);
}
else
{
printf("打开save成功\n");
}
int length = totallist(l);
fprintf(fp,"学生学号 学生姓名 年龄 性别 出生年月 地址 手机号码 email \n");
for (int i = 0;i < length;i++) {
fprintf(fp, "%6s", p->data.no.c_str());
fprintf(fp, "%7s", p->data.name.c_str());
fprintf(fp, "%6d", p->data.age);
fprintf(fp, "%6s", p->data.xb.c_str());
fprintf(fp, "%6lld", p->data.birth);
fprintf(fp, "%6s", p->data.add.c_str());
fprintf(fp, "%6lld", p->data.phone);
fprintf(fp, "%6s\n", p->data.email.c_str());
p = p->next;
}
printf("成功\n");
fclose(fp);
system("cls");
}
void refresh() { //刷新界面
printf(" 刷新完毕!!!");
system("pause");
system("cls");
}
void showlist(linklist &l){//展示所有学生信息
lnode *p;
p=l->next;
int j=1;
while(p){
cout<<"第"<<j<<"个学生的姓名为:"<<p->data.name;
cout<<"\n学号为:"<<p->data.no;
cout<<"\n性别为:"<<p->data.xb;
cout<<"\n年龄为:"<<p->data.age;
cout<<"\n出生年月为:"<<p->data.birth;
cout<<"\n地址为:"<<p->data.add;
cout<<"\n电话为:"<<p->data.phone;
cout<<"\n电子邮箱为:"<<p->data.email<<endl;
j++;
p=p->next;
}
system("pause");
system("cls");
}
void findlist_name(linklist &l){//根据学生姓名查找
lnode *p;
p=l->next;
cout<<"请输入你想要查询学生的姓名:"<<endl;
string name;
cin>>name;
while(p&&p->data.name!=name){
p=p->next;
}
if(p){
cout<<"此学生姓名为:"<<p->data.name;
cout<<"\n学号为:"<<p->data.no;
cout<<"\n性别为:"<<p->data.x