c/c++学生信息管理系统

学生信息管理系统设计 

【功能要求】 

学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值