求C语言大学模拟管理系统代码

2025-02-25 06:06:54
推荐回答(5个)
回答1:

输入验证我没写,你要自己添加。

输入那里switch case少一个break,是利用case贯通的效果,不要补充break。

#include 
#include 
#include 
#include 
#include 
typedef struct node
{
    char id[20];//身份证
    char on[20];//学号
    char name[40];//姓名
    char subject[20];//专业
    struct tm  esTime;//入学时间
    int flag;//0:在职学生;1:普通学生;2:教师
    char title[20];//职称
    char faculty[20];//所在系
    float wages;//工资
    struct node *nexteStu;//在职学生链表指针
    struct node *nextStu;// 学生链表指针
    struct node *nextTea;//教师链表指针
}NODE;

void newNode(NODE **nodeHeads,NODE **nodeTails,int flag);//增加节点
void printfNodes(NODE **nodeHead,int flag);//打印链表

void meError(void *p);//内存申请失败
int main()
{
    int n,flag;
    NODE *nodeHeads[3]={NULL},*nodeTails[3]={NULL};
    while(1)
    {
        printf("选择要录入的人员类型:\n------0、在职学生。\n------1、普通学生。\n------2、教师 。\n------3、结束输入\n");
        scanf("%d",&flag);
        if(flag==0 || flag==1 ||flag==2)
        while(1)
        {
            newNode(nodeHeads,nodeTails,flag);
            printf("1、继续输入;2、返回主菜单;\n");
            scanf("%d",&n);
            if(n==2)
                break;
        }
        if(flag==3)
            break;

    }
    printfNodes(nodeHeads,0);
    printfNodes(nodeHeads,1);
    printfNodes(nodeHeads,2);

    return 0;
}


void printfNodes(NODE **nodeHeads,int flag)//打印链表
{
    NODE *nhSave=NULL;
    if(nodeHeads[flag])
    {

        switch(flag)
        {
            case 0:
                nhSave=nodeHeads[flag];
                printf("输入的在职学生信息:\n");
                while(nhSave->nexteStu)
                {
                    printf("----身份证:%s\n----学号:%s\n----姓名:%s\n----专业:%s\n----入学时间:%04d-%02d-%02d\n----职称:%s\n----所在系:%s\n----工资:%.2f\n",
                           nhSave->nexteStu->id,nhSave->nexteStu->on,nhSave->nexteStu->name,nhSave->nexteStu->subject,
                           nhSave->nexteStu->esTime.tm_year+1900,nhSave->nexteStu->esTime.tm_mon,nhSave->nexteStu->esTime.tm_mday,
                           nhSave->nexteStu->title,nhSave->nexteStu->faculty,nhSave->nexteStu->wages);
                    nhSave=nhSave->nexteStu;
                }

                break;
            case 1:
                nhSave=nodeHeads[flag];
                printf("输入的普通学生信息:\n");
                while(nhSave->nextStu)
                {
                    printf("----身份证:%s\n----学号:%s\n----姓名:%s\n----专业:%s\n----入学时间:%04d-%02d-%02d\n",
                           nhSave->nextStu->id,nhSave->nextStu->on,nhSave->nextStu->name,nhSave->nextStu->subject,
                           nhSave->nextStu->esTime.tm_year+1900,nhSave->nextStu->esTime.tm_mon,nhSave->nextStu->esTime.tm_mday);
                    nhSave=nhSave->nextStu;
                }
                break;
            case 2:
                nhSave=nodeHeads[flag];
                printf("输入的教师信息:\n");
                while(nhSave->nextTea)
                {
                    printf("----身份证:%s\n----姓名:%s\n----职称:%s\n----所在系:%s\n----工资:%.2f\n",
                           nhSave->nextTea->id,nhSave->nextTea->name,
                           nhSave->nextTea->title,nhSave->nextTea->faculty,nhSave->nextTea->wages);
                    nhSave=nhSave->nextTea;
                }
                break;
        }
    }

    printf("\n");
}

void newNode(NODE **nodeHeads,NODE **nodeTails,int flag)//增加节点
{
    NODE *nHead=nodeHeads[flag],*nTail=nodeTails[flag],*nodeNew=NULL;

    nodeNew=(NODE *)malloc(sizeof(NODE));
    nodeNew->flag=flag;
    nodeNew->nextStu=NULL;
    nodeNew->nexteStu=NULL;
    nodeNew->nextTea=NULL;
    switch(flag)
    {
        case 0:
            printf("在职学生信息录入:\n");
            break;
        case 1:
            printf("普通学生信息录入:\n");
            break;
        case 2:
            printf("教师信息录入:\n");
            break;
    }


    printf("请输入身份证:");
    scanf("%s",nodeNew->id);
    printf("请输入姓名:");
    scanf("%s",nodeNew->name);

    switch(flag)
    {
        case 0:
            printf("请输入职称:");
            scanf("%s",nodeNew->title);
            printf("请输入所在系:");
            scanf("%s",nodeNew->faculty);
            printf("请输入工资:");
            scanf("%f",&nodeNew->wages);
        case 1:
            printf("请输入学号:");
            scanf("%s",nodeNew->on);
            printf("请输入专业:");
            scanf("%s",nodeNew->subject);
            printf("请输入入学时间(YY-MM-DD):");
            scanf("%4d-%02d-%02d",&nodeNew->esTime.tm_year,&nodeNew->esTime.tm_mon,&nodeNew->esTime.tm_mday);
            nodeNew->esTime.tm_year-=1900;
            break;
        case 2:
            printf("请输入职称:");
            scanf("%s",nodeNew->title);
            printf("请输入所在系:");
            scanf("%s",nodeNew->faculty);
            printf("请输入工资:");
            scanf("%f",&nodeNew->wages);
            break;
    }

    if(nHead==NULL)
    {
        nHead=(NODE *)malloc(sizeof(NODE));
        meError(nHead);
        nHead->flag=-1;
        nHead->nextStu=NULL;
        nHead->nexteStu=NULL;
        nHead->nextTea=NULL;
    }
    if((flag==0 && nHead->nexteStu==NULL) || (flag==1 && nHead->nextStu==NULL) ||(flag==2 && nHead->nextTea==NULL))
        switch(flag)
        {
            case 0:nHead->nexteStu=nodeNew;break;
            case 1:nHead->nextStu=nodeNew;break;
            case 2:nHead->nextTea=nodeNew;break;
        }
    else if((flag==0 && nHead->nexteStu!=NULL) || (flag==1 && nHead->nextStu!=NULL) ||(flag==2 && nHead->nextTea!=NULL))
        switch(flag)
        {
            case 0:nTail->nexteStu=nodeNew;break;
            case 1:nTail->nextStu=nodeNew;break;
            case 2:nTail->nextTea=nodeNew;break;
        }
    nTail=nodeNew;

    nodeHeads[flag]=nHead;
    nodeTails[flag]=nTail;
}
void meError(void *p)//内存申请失败
{
    if(p==NULL)
    {
        printf("\n异常:内存申请失败!回车结束程序!\n");
        while(getch()!='\r');
        exit(0);
    }
}

回答2:

你的这个要求实在是太高了。不会有人满足你的要求的。因为该问题早就已经不仅仅是一个简单的 C 语言编程问题了。它涉及到编程过程中的很多理论知识。例如:数据结构和算法的设计、整个程序的总体设计风格、以及即使在集成编程环境下面录入完全部的程序源代码,但是程序必须要经过一系列的不断调试(例如:在可疑的语句处设置断点、单步跟踪等)、编译、链接,直到运行出最终的正确结果。

故你的这个要求只能够依靠自己的刻苦努力编写、以及不断调试、运行程序来完成了。

回答3:

还要mfc人机界面啊

回答4:

求求啦还有没有人啊

回答5:

又不难,自己不会写?