求C语言大学模拟管理系统代码
发布网友
发布时间:2022-05-05 03:35
我来回答
共5个回答
热心网友
时间:2022-05-10 10:32
输入验证我没写,你要自己添加。
输入那里switch case少一个break,是利用case贯通的效果,不要补充break。
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <malloc.h>
#include <time.h>
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);
}
}
热心网友
时间:2022-05-10 11:50
你的这个要求实在是太高了。不会有人满足你的要求的。因为该问题早就已经不仅仅是一个简单的 C 语言编程问题了。它涉及到编程过程中的很多理论知识。例如:数据结构和算法的设计、整个程序的总体设计风格、以及即使在集成编程环境下面录入完全部的程序源代码,但是程序必须要经过一系列的不断调试(例如:在可疑的语句处设置断点、单步跟踪等)、编译、链接,直到运行出最终的正确结果。
故你的这个要求只能够依靠自己的刻苦努力编写、以及不断调试、运行程序来完成了。
热心网友
时间:2022-05-10 13:24
还要mfc人机界面啊
热心网友
时间:2022-05-10 15:16
求求啦还有没有人啊
热心网友
时间:2022-05-10 17:24
又不难,自己不会写?追答私信