个人信息管理

#include "stdafx.h"
#include<stdio.h>
#include<string.h>
#include<windows.h>
#define maxstudent 40//最大的学生数40
typedef struct student
{
    int num;
    int classid;
    int year;
    char sex;
    char nation[6];
    char major[20];
    char name[20];
}stu;
int cmpnum(const void *a, const void *b)//qsort 比较函数 num
{
    return ((stu *)a)->num - ((stu *)b)->num;
}
int cmpyear(const void *a, const void *b)//qsort 比较函数 year
{
    return((stu *)a)->year - ((stu *)b)->year;
}
int delete1(int index, int n);//按位置删除

void show();//输出

int delete_num(int num, int n);//按学号删除

void ui_son();//子界面

void save(int n);//文件保存

int loading();//文件读取

void sortByCode();//按学号排序

void sort_year();//按年龄排序

void find_num(int element, int n);//按学生学号查询

void find_name(char name[], int n);//按学生名字查询

int odd(int n);//从最后一个位置插入

int input();//输出

void ui();//主界面

int insert(int index, int n);//从有效位置插入

void judge_year(int k);//年龄的判断
void judge_num(int k);//学号的判断
void judge_sex(int k);//性别的判断
void modify(int element, int length);//修改学生信息
void son_operator();//子界面的操作
void input_son(int i);//子输入函数
stu s[maxstudent];
int n;//结构体长度
int tag;
int choose;
int numflag = 0;
int yearflag = 0;
int sexflag = 0;

int main()
{

    stu s[maxstudent];
    int index, element, number;
    int select;
    char findname[20];
    printf("\t\t欢迎进入学生信息系统\n");
    printf("\t\t请输入序号进入特定功能\n");
    tag = 1;
    //n = loading();
    while (tag == 1)
    {
        tag = 0;
        ui();
        while(scanf("%d", &select) == 0)
        {
            printf("输入错误,请重新输入\n");
            fflush(stdin);
        }
        if (select == 1)
        {
            n = input();
            printf("\t信息已成功录入系统!\n");
            son_operator();
        }
        else if (select == 2)
        {
            show();
            tag = 1;
        }
        else if (select == 3)
        {
            sortByCode();//按学号进行排序
            son_operator();
        }
        else if (select == 4)
        {
            sort_year();//按年龄进行排序
            son_operator();
        }
        else if (select == 5)
        {
            printf("\t请输入添加的位置:");
            scanf("%d", &index);
            n = insert(index, n);//插入学生信息
            son_operator();
        }
        else if (select == 6)
        {
            n = odd(n);
            son_operator();
        }
        else if (select == 7)//按学号查找学生信息
        {
            printf("\t请输入查询的学生号码\n\t");
            scanf("%d", &element);
            find_num(element, n);
            tag = 1;
        }
        else if (select == 8)
        {
            printf("\t请输入查询的学生名字\n\t");//按名字进行查找
            scanf("%s", findname);
            find_name(findname, n);
            tag = 1;
        }
        else if (select == 9)//按位置删除学生信息
        {
            printf("\t请输入删除的位置:");
            scanf("%d", &index);
            n = delete1(index, n);
            son_operator();
        }
        else if (select == 10)
        {
            printf("\t请输入删除的学号:");
            scanf("%d", &number);//需要删除的学号
            n = delete_num(number, n);
            son_operator();
        }
        else if (select == 11)
        {
            printf("请输入要修改的学生的学号");
            scanf("%d", &element);
            modify(element, n);
            son_operator();
        }
        else if (select == 12)
        {
            save(n);
            printf("\t学生信息保存成功\t");
            tag = 1;
        }
        else if (select == 13)
        {
            save(n);
            printf("\t程序关闭\n");
            tag = 1;
            return 0;
        }
        else 
        {
            save(n);
            system("cls");
            printf("\t输入错误,请重新输入\n");
            tag = 1;    
        }
    }
}void show()//输出
{
    system("cls");
    int i;
    printf("\n\n");
    printf("\t\t学生的信息为\n");
    printf("学生编号  学生学号  班级编号  年龄  性别  姓名  民族  专业课\n");
    for (i = 0; i < n; i++)
    {
        printf("%-10d", i + 1);
        printf("%-10d%-10d%-6d%-6c%-6s%-6s%-8s\n", s[i].num, s[i].classid, s[i].year, s[i].sex, s[i].name, s[i].nation, s[i].major);
    }
}

int delete_num(int num, int n)//按学号删除
{
    int i, j, flag = 0;
    char yn;
    for (i = 0; i < n; i++)
    {
        if (s[i].num == num)
        {
            j = i;
            break;
        }
    }
    if (i >= n)
    {
        printf("\t无此学号,学生信息删除失败!!\n");
        return n;
    }
    printf("\t是否删除 y表示是 n表示否 :");
    getchar();
    scanf("%c", &yn);
    if (yn == 'y')
    {
        if (j < n)
        {
            for (j = i + 1; j < n; j++)
            {
                s[j - 1] = s[j];
            }
            n--;
            printf("\t学生信息删除成功!!\n");
            return n;
        }
    }
    else
    {
        printf("\t学生信息未删除!!\n");
        return n;
    }
}

int delete1(int index, int n)//按位置删除
{
    int i, flag = 0;
    char yn;
    if (n == 0)
        return 0;
    if (index < 1 || index > n)
    {
        printf("删除的位置错误\n");
        printf("删除失败\n");
        return 0;
    }
    printf("\t是否删除 y表示是 n表示否 :");
    getchar();
    scanf("%c", &yn);
    if (yn == 'y')
    {
        for (i = index; i < n; i++)
            s[i - 1] = s[i];
        n--;
        printf("\t删除成功!!\n");
        return n;
    }
    else
    {
        printf("\t学生信息未删除!!\n");
        return n;
    }
}

void save(int n)
{
    FILE * out;
    if ((out = fopen("student.txt", "w")) == NULL)
    {
        printf("cannot open this file\n");
        exit(0);
    }
    int i;
    for (i = 0; i < n; i++)
    {
        fprintf(out, "%d %d %d %c %s %s %s\n", s[i].num, s[i].classid, s[i].year, s[i].sex, s[i].name, s[i].nation, s[i].major);
    }
    fclose(out);
}

int loading()
{
    int i = 0;
    FILE *in;
    if ((in = fopen("student.txt", "r")) == NULL)
    {
        printf("cannot open this file\n");
        exit(0);
    }
    else
    {
        n = 0;
        while (fscanf(in, "%d %d %d %c %s %s %s", &s[i].num, &s[i].classid, &s[i].year, &s[i].sex, s[i].name, s[i].nation, s[i].major) == 7)
        {
            i++;
            n++;
        }

    }
    fclose(in);
    return i;
}

void sortByCode()//按学号排序
{
    qsort(s, n, sizeof(stu), cmpnum);
    printf("\t学生按学号排序成功!\n");
    return;
}

void sort_year()//按年龄排序
{
    qsort(s, n, sizeof(stu), cmpyear);
    printf("\t学生按年龄排序成功!\n");
    return;
}

void find_num(int element, int n)//按学生学号查询
{
    int i;
    int flag = 0;
    for (i = 0; i < n; i++)
    {
        if (s[i].num == element)
        {
            flag = 1;
            break;
        }
    }
    if (flag)
    {
        printf("\t找到了这个学生\n");
        printf("学生编号  学生学号  班级编号  年龄  性别  姓名  民族  专业课\n");
        printf("%-10d", i + 1);
        printf("%-10d%-10d%-6d%-6c%-6s%-6s%-8s\n", s[i].num, s[i].classid, s[i].year, s[i].sex, s[i].name, s[i].nation, s[i].major);
        return;
    }
    if (i >= n)
    {
        printf("\t没找到\n");
        return;
    }
}

void find_name(char name[], int n)
{
    int i, flag = 0;
    for (i = 0; i < n; i++)
    {
        if (strcmp(s[i].name, name) == 0)
        {
            flag = 1;
            printf("\t找到了这个学生\n");
            printf("学生编号  学生学号  班级编号  年龄  性别  姓名  民族  专业课\n");
            printf("%-10d", i + 1);
            printf("%-10d%-10d%-6d%-6c%-6s%-6s%-8s\n", s[i].num, s[i].classid, s[i].year, s[i].sex, s[i].name, s[i].nation, s[i].major);
        }
    }
    if (flag == 0)
    {
        printf("\t没找到!!\n");
    }
    return;
}
int odd(int n)//从最后一个位置添加
{
    int i, flag;
    int k = n + 1;
    if (k > maxstudent)
    {
        printf("\t学生人数超出上限!!\n");
        return 0;
    }
    input_son(n);
    n++;
    printf("\t学生信息添加成功\n");
    return n;
}
int insert(int index, int n)//从有效位置插入
{
    int i, digit = 0, num;
    stu m;
    int k = n + 1;
    if (k > maxstudent)
    {
        printf("\t学生人数超出上限插入失败!!\n");
        return 0;
    }
    if (index < 1 || index > n)
    {
        printf("\t插入的位置错误\n");
        printf("\t插入失败!!\n");
        return 0;
    }
    do
    {
        digit = 0;
        numflag = 0;
        printf("\t请输入学生学号:");
        scanf("%d", &m.num);
        num = m.num;
        while (num)
        {
            digit++;
            num /= 10;
        }
        for (i = 0; i < n; i++)
        {
            if (m.num == s[i].num)
            {
                numflag = 1;
                break;
            }
        }
        if (digit != 4 || i < n)
        {
            printf("\t学号输入错误!!\n");
            numflag = 1;
        }
    } while (numflag == 1);
    printf("\t输入成功!\n");
    printf("\t请输入学生班级编号:");
    scanf("%d", &m.classid);
    printf("\t输入成功!\n");
    do
    {
        yearflag = 0;
        printf("\t请输入学生年龄:");
        scanf("%d", &m.year);
        if (m.year < 15 || m.year > 25)
        {
            printf("\t年龄输入错误!!\n");
            yearflag = 1;
        }
    } while (yearflag == 1);
    printf("\t输入成功!\n");
    do
    {
        printf("\t请输入学生性别:");
        getchar();
        scanf("%c", &m.sex);
        if (m.sex != 'f' && m.sex != 'm')
        {
            printf("\t性别输入错误!!\n");
            sexflag = 1;
        }
    } while (sexflag == 1);
    printf("\t输入成功!\n");
    printf("\t请输入学生名字:");
    scanf("%s", m.name);
    printf("\t输入成功!\n");
    printf("\t请输入学生民族:");
    scanf("%s", m.nation);
    printf("\t输入成功!\n");
    printf("\t请输入学生专业课:");
    scanf("%s", m.major);
    printf("\t输入成功!\n");
    printf("\t学生信息插入成功\n");

    for (i = n - 1; i >= index - 1; i--)
    {
        s[i + 1] = s[i];
    }
    s[index - 1] = m;
    n++;
    return n;
}
int input()
{
    int i, flag = 0, j;
    printf("\t请输入学生总人数:");
    scanf("%d", &n);
    if (n > maxstudent)
    {
        printf("\t学生人数超出上限 失败!!\n");
        return 0;
    }
    for (i = 0; i < n; i++)
    {
        input_son(i);
    }
    return n;
}
void modify(int element, int length)
{
    int i, j, flag = 0;
    for (j = 0; j < length; j++)
    {
        if (element == s[j].num)
        {
            i = j;
            flag = 1;
            break;
        }
    }
    if (flag)
    {
        printf("\t请输入学生班级编号:");
        scanf("%d", &s[i].classid);
        printf("\t输入成功!\n");
        do
        {
            printf("\t请输入学生年龄:");
            scanf("%d", &s[i].year);
            judge_year(i);
        } while (yearflag == 1);
        printf("\t输入成功!\n");
        do
        {
            printf("\t请输入学生性别:");
            getchar();
            scanf("%c", &s[i].sex);
            judge_sex(i);
        } while (sexflag == 1);
        printf("\t输入成功!\n");
        printf("\t请输入学生名字:");
        scanf("%s", s[i].name);
        printf("\t输入成功!\n");
        printf("\t请输入学生民族:");
        scanf("%s", s[i].nation);
        printf("\t输入成功!\n");
        printf("\t请输入学生专业课:");
        scanf("%s", s[i].major);
        printf("\t输入成功!\n");
    }
    else
    {
        printf("\t没找到这个学号!!\n修改失败!!\n");
    }
}
void ui()
{
    printf("\n\n");
    printf("\t\t1.初始化学生信息\n");
    printf("\t\t2.显示学生信息\n");
    printf("\t\t3.按学号进行排序\n");
    printf("\t\t4.按年龄进行排序\n");
    printf("\t\t5.插入学生信息\n");
    printf("\t\t6.直接向后添加学生信息\n");
    printf("\t\t7.按学号查找学生信息\n");
    printf("\t\t8.按姓名查找学生信息\n");
    printf("\t\t9.按位置删除学生信息\n");
    printf("\t\t10.按学号删除学生信息\n");
    printf("\t\t11.按学号修改学生信息\n");
    printf("\t\t12.保存学生信息\n");
    printf("\t\t13.退出程序\n");
    printf("\t请输入:");
}
void ui_son()
{
    printf("\t\t1.显示当前学生信息\n");
    printf("\t\t2.返回主菜单\n");
    printf("\t\t3.退出系统\n");

}
void son_operator()
{
    ui_son();
    printf("\t");
    scanf("%d", &choose);
    if (choose == 1)
    {
        show();
        tag = 1;
        return;
    }
    else if (choose == 2)
    {
        tag = 1;
    }
    else if (choose == 3)
        return;
}
void judge_num(int k)
{
    numflag = 0;
    int j;
    int digit = 0;
    int num = s[k].num;
    while (s[k].num)
    {
        digit++;
        s[k].num /= 10;
    }
    s[k].num = num;
    for (j = k - 1; j >= 0; j--)
    {
        if (num == s[j].num || digit != 4)
        {
            printf("\t输入的学号有误!!\n");
            numflag = 1;
            break;
        }
    }
    if (k == 0)
    {
        if (digit != 4)
        {
            printf("\t输入的学号有误!!\n");
            numflag = 1;
        }
    }
    return;
}
void judge_year(int k)
{
    yearflag = 0;
    if (s[k].year < 15 || s[k].year > 25)
    {
        printf("\t年龄输入错误!!\n");
        yearflag = 1;
    }
    return;
}
void judge_sex(int k)
{
    sexflag = 0;
    if (s[k].sex != 'm' && s[k].sex != 'f')
    {
        sexflag = 1;
        printf("\t性别输入错误!!\n");
    }
}
void input_son(int i)
{
    do
    {
        printf("\t请输入学生学号:");
        scanf("%d", &s[i].num);
        judge_num(i);
    } while (numflag == 1);
    printf("\t输入成功!\n");
    printf("\t请输入学生班级编号:");
    scanf("%d", &s[i].classid);
    printf("\t输入成功!\n");
    do
    {
        printf("\t请输入学生年龄:");
        scanf("%d", &s[i].year);
        judge_year(i);
    } while (yearflag == 1);
    printf("\t输入成功!\n");
    do
    {
        printf("\t请输入学生性别:");
        getchar();
        scanf("%c", &s[i].sex);
        judge_sex(i);
    } while (sexflag == 1);
    printf("\t输入成功!\n");
    printf("\t请输入学生名字:");
    scanf("%s", s[i].name);
    printf("\t输入成功!\n");
    printf("\t请输入学生民族:");
    scanf("%s", s[i].nation);
    printf("\t输入成功!\n");
    printf("\t请输入学生专业课:");
    scanf("%s", s[i].major);
    printf("\t输入成功!\n");
    system("cls");
}
posted @ 2017-06-20 21:56  云胡同学  阅读(145)  评论(0编辑  收藏  举报