吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1013|回复: 7
收起左侧

[求助] c大一实训大神帮下忙

[复制链接]
dai15234791133 发表于 2019-12-31 14:03
本帖最后由 dai15234791133 于 2019-12-31 14:05 编辑

include<stdio.h>

include<stdlib.h>

include<windows.h>

include<conio.h>

include<string.h>

typedef enum {MAN, WOMAN} SEX;
typedef struct Student {
int StuId;              //学生的编号
char StuName[20];       //学生的姓名
SEX sex;                //学生的性别
int age;                //学生的年龄
float score;            //学生的成绩
char census[20];        //学生的户籍地
struct Student next;   //下一个节点的指针
} STUDENT,
NEWSTUDENT;
STUDENT top; //头节点
void HomePage();
void intlogin();
void student_login();
void teacher_login();
void StudentMenu();
void TeacherMenu();
NEWSTUDENT CreateStu();//创建一个节点,返回一个新创建的学生信息节点的指针
NEWSTUDENT GetPrev(int num);//返回指定编号学生节点的上一个节点的指针
int AddStu(NEWSTUDENT pstu);//把学生信息节点加入到链表中
void ShowAll();
void DeleteStu(int StuId);
void ReviseStu(int StuId);
void SearchStu(int StuId);
int getStuId();
int Question(const char *pstr);

int main() {
system("color a4"); //设置DOS窗口的背景颜色和字体颜色
HomePage();//打开首页
}
void HomePage() {//首页
system("cls");
int i;
printf("\n");
printf("    ★☆★☆★☆★☆★☆★☆★☆★☆★☆☆★☆★☆★☆★☆★☆★☆★☆★☆★\n");
printf("    ★☆\t\t\t\t\t\t\t\t☆★\n");
printf("    ★☆\t\t     物联网学生信息管理系统 \t\t\t☆★\n");
printf("    ★☆\t\t\t\t\t\t\t\t☆★\n");
printf("    ★☆\t\t  请输入数字进入相应的管理系统  \t\t☆★\n");
printf("    ★☆\t\t\t\t\t\t\t\t☆★\n");
printf("    ★☆\t\t        1、学生管理系统    \t\t\t☆★\n");
printf("    ★☆\t\t        2、教师管理系统    \t\t\t☆★\n");
printf("    ★☆\t\t        3、退出管理系统    \t\t\t☆★\n");
printf("    ★☆\t\t\t\t\t\t\t\t☆★\n");
printf("    ★☆\t\t    输入数字按回车键确定选择\t\t\t☆★\n");
printf("    ★☆\t\t\t\t\t\t\t\t☆★\n");
printf("    ★☆\t\t\t\t\t\t\t\t☆★\n");
printf("    ★☆\t\t\t\t\t\t\t\t☆★\n");
printf("    ★☆\t\t\t\t\t\t\t\t☆★\n");
printf("    ★☆\t\t\t\t\t\t\t\t☆★\n");
printf("    ★☆\t\t\t\t\t\t\t\t☆★\n");
printf("    ★☆\t\t\t\t\t\t\t\t☆★\n");
printf("    ★☆\t\t\t\t\t\t\t\t☆★\n");
printf("    ★☆\t\t\t\t\t\t\t\t☆★\n");
printf("    ★☆★☆★☆★☆★☆★☆★☆★☆★☆☆★☆★☆★☆★☆★☆★☆★☆★☆★\n");

scanf("%d",&i);
switch(i) {
    case 1:
        intlogin();
        student_login();
        break;
    case 2:
        intlogin();
        teacher_login();
        break;
    case 3:
        system("exit");
        exit(0);
    default:
        system("cls");
        HomePage();
}

}
void intlogin() {
if(getchar()=='\n');
printf("\t\t    系统正在初始化,马上进入登录界面,请稍后......\n");
Sleep(3000);
system("cls");
}
void student_login() {//学生登录界面,并且做密码验证,成功即转到学生菜单
int tpwd=0;
char ch=' ';
int count=0;
char stu_key[20]="1";
char pwd_key[10]="111111";
char stu[20];
char pwd[10];

printf("    ★☆★☆★☆★☆★☆★☆★☆★☆★☆☆★☆★☆★☆★☆★☆★☆★☆★☆★\n");
printf("    ★☆\t\t\t正在登录学生管理系统      \t\t☆★\n");
printf("    ★☆★☆★☆★☆★☆★☆★☆★☆★☆☆★☆★☆★☆★☆★☆★☆★☆★☆★\n");
printf("\n\n\n");
printf("       \t\t\t     请输入您的用户名和密码!\n");
printf("       \t\t   (友情提示:用户名1,密码111111)\n\n\n");
printf("       \t\t   用户名:");
fflush(stdin);
gets(stu);

printf("       \t\t   密  码:");
fflush(stdin);
//gets(pwd);
//改成*号状态代替密码
{
    for(int i=0; i<6; i++) {
        fflush(stdin);
        ch=getch();
        if(ch=='\n')
            break;
        putchar('*');
        if(ch==pwd_key[i]) {
            count++;
            if(count==6) {
                tpwd=1;  //表明密码正确
                break;
            }
        } else if(count==6)
            tpwd=0;
    }

}

if(getchar()=='\n');
if((strcmp(stu_key,stu)==0)&&tpwd) {
    printf("\n\n\n\n\n");
    printf("\n\t\t\t\t恭喜您登录成功^_^\n");
    printf("\n\t\t\t  正在进入系统,请稍后... ...");
    Sleep(1000);
    for(int j=5; j>0; j--) {
        system("cls");
        printf("\n\n\n\n\n\n\n\n");
        printf("\n\t\t\t\t还有%d秒进入系统...",j);
        Sleep(1000);
    }
    StudentMenu();
} else {
    Sleep(1000);
    for(int j=5; j>0; j--) {
        system("cls");
        printf("\n\n\n\n\n\n\n\n");
        printf("\n\t\t\t\t用户名和密码不对,请重新输入!\n");
        printf("\n\t\t\t\t还有%d秒返回系统首页...",j);
        Sleep(1000);
    }
    HomePage();
}

}
void teacher_login() {//教师登录界面,并且做密码验证,成功即转到教师菜单
int tpwd=0;
char ch=' ';
int count=0;
char stu_key[20]="2";
char pwd_key[10]="222222";
char stu[20];
char pwd[10];

printf("    ★☆★☆★☆★☆★☆★☆★☆★☆★☆☆★☆★☆★☆★☆★☆★☆★☆★☆★\n");
printf("    ★☆\t\t\t正在登录教师管理系统      \t\t☆★\n");
printf("    ★☆★☆★☆★☆★☆★☆★☆★☆★☆☆★☆★☆★☆★☆★☆★☆★☆★☆★\n");
printf("\n\n\n");
printf("       \t\t\t     请输入您的用户名和密码!\n");
printf("       \t\t   (友情提示:用户名2,密码222222)\n\n\n");
printf("       \t\t   用户名:");
fflush(stdin);
gets(stu);

printf("       \t\t   密  码:");
fflush(stdin);
//gets(pwd);
//改成*号状态代替密码
{
    for(int i=0; i<6; i++) {
        fflush(stdin);
        ch=getch();
        if(ch=='\n')
            break;
        putchar('*');
        if(ch==pwd_key[i]) {
            count++;
            if(count==6) {
                tpwd=1;  //表明密码正确
                break;
            }
        } else if(count==6)
            tpwd=0;
    }

}

if(getchar()=='\n');
if((strcmp(stu_key,stu)==0)&&tpwd) {
    printf("\n\n\n\n\n");
    printf("\n\t\t\t\t恭喜您登录成功^_^\n");
    printf("\n\t\t\t  正在进入系统,请稍后... ...");
    Sleep(1000);
    for(int j=5; j>0; j--) {
        system("cls");
        printf("\n\n\n\n\n\n\n\n");
        printf("\n\t\t\t\t还有%d秒进入系统...",j);
        Sleep(1000);
    }
    TeacherMenu();
} else {
    Sleep(1000);
    for(int j=5; j>0; j--) {
        system("cls");
        printf("\n\n\n\n\n\n\n\n");
        printf("\n\t\t\t\t用户名和密码不对,请重新输入!\n");
        printf("\n\t\t\t\t还有%d秒返回系统首页...",j);
        Sleep(1000);
    }
    HomePage();
}

}
void StudentMenu() {//学生功能菜单

system("cls");
printf("\n");
printf("    ★☆★☆★☆★☆★☆★☆★☆★☆★☆☆★☆★☆★☆★☆★☆★☆★☆★☆★\n");
printf("    ★☆\t\t\t\t\t\t\t\t☆★\n");
printf("    ★☆\t\t\t 学生管理系统              \t\t☆★\n");
printf("    ★☆\t\t\t\t\t\t\t\t☆★\n");
printf("    ★☆\t1.查找某个学生信息         2.显示所有学生信息\t\t☆★\n");
printf("    ★☆\t3.退出学生管理系统         4.返回管理系统首页\t\t☆★\n");
printf("    ★☆\t\t\t\t\t\t\t\t☆★\n");
printf("    ★☆\t\t    输入数字按回车键确定选择\t\t\t☆★\n");
printf("    ★☆\t\t\t\t\t\t\t\t☆★\n");
printf("    ★☆★☆★☆★☆★☆★☆★☆★☆★☆☆★☆★☆★☆★☆★☆★☆★☆★☆★\n");

int num;
printf("\n    请选择菜单(1 ~ 4):");
scanf("%d", &num);
switch(num) {
    case 1:
        printf("你选择了菜单1\n");
        break;
    case 2:
        char ch;
        do {
            ShowAll();
            printf("\n\t\t\t     执行完毕,按任意键继续...");
            ch=getch();
        } while(!ch);
        StudentMenu();
        break;
    case 3:
        system("exit");
        exit(0);
    case 4:
        HomePage();
        break;
    default:
        printf("\n");
        printf("    选择菜单错误,请重新选择(1 ~ 4):\n");
        for(int j=5; j>0; j--) {
            printf("\n\t\t\t      等待%d秒刷新本界面...",j);
            Sleep(1000);
        }
        fflush(stdin);//清空输入缓冲区
        StudentMenu();
}

}
void TeacherMenu() { //教师功能菜单
system("cls");
printf("\n");
printf("    ★☆★☆★☆★☆★☆★☆★☆★☆★☆☆★☆★☆★☆★☆★☆★☆★☆★☆★\n");
printf("    ★☆\t\t\t\t\t\t\t\t☆★\n");
printf("    ★☆\t\t\t 教师管理系统              \t\t☆★\n");
printf("    ★☆\t\t\t\t\t\t\t\t☆★\n");
printf("    ★☆\t1.查找某个学生信息         2.显示所有学生信息\t\t☆★\n");
printf("    ★☆\t3.添加一个学生信息         4.删除某个学生信息\t\t☆★\n");
printf("    ★☆\t5.修改某个学生信息         6.退出教师管理系统\t\t☆★\n");
printf("    ★☆\t7.返回管理系统首页\t\t\t\t\t☆★\n");
printf("    ★☆\t\t\t\t\t\t\t\t☆★\n");
printf("    ★☆\t\t    输入数字按回车键确定选择\t\t\t☆★\n");
printf("    ★☆\t\t\t\t\t\t\t\t☆★\n");
printf("    ★☆★☆★☆★☆★☆★☆★☆★☆★☆☆★☆★☆★☆★☆★☆★☆★☆★☆★\n");

int num;
printf("\n    请选择菜单(1 ~ 7):");
scanf("%d", &num);
switch(num) {
    case 1:
        char chs;
        do {
            SearchStu(getStuId());
            printf("\n\t\t\t     执行完毕,按任意键继续...");
            chs=getch();
        } while(!chs);
        TeacherMenu();
        break;
    case 2:
        char ch;
        do {
            ShowAll();
            printf("\n\t\t\t     执行完毕,按任意键继续...");
            ch=getch();
        } while(!ch);
        TeacherMenu();
        break;
    case 3:
        AddStu(CreateStu());
        printf("\n\t\t\t     执行完毕,等待刷新界面...");
        Sleep(2000);
        TeacherMenu();
        break;
    case 4:
        DeleteStu(getStuId());
        printf("\n\t\t\t     执行完毕,等待刷新界面...");
        Sleep(2000);
        TeacherMenu();
        break;
    case 5:
        ReviseStu(getStuId());
        printf("\n\t\t\t     执行完毕,等待刷新界面...");
        Sleep(2000);
        TeacherMenu();
        break;
    case 6:
        system("exit");
        exit(0);
    case 7:
        system("exit");
        exit(0);
    default:
        printf("\n");
        printf("    选择菜单错误,请重新选择(1 ~ 7):\n");
        for(int j=5; j>0; j--) {
            printf("\n\t\t\t      等待%d秒刷新本界面...",j);
            Sleep(1000);
        }
        fflush(stdin);//清空输入缓冲区
        TeacherMenu();
}

}
NEWSTUDENT CreateStu() {//创建新学生并做相关校验
int sex;
NEWSTUDENT pstu = (NEWSTUDENT)malloc(sizeof(STUDENT));//在堆内存申请空间,存储学生信息
if(!pstu)
{
printf("    申请内存空间失败!\n");
return NULL;
}
printf("    请输入学生的学号(10位学号):");
while(1 != scanf("%d", &pstu->StuId) || GetPrev(pstu->StuId))
{
printf("    学生的学号输入错误或已经存在,请重新输入学生的学号(10位学号):");
fflush(stdin);
}
printf("    请输入学生的姓名(小于20字符):");
scanf("%20s", pstu->StuName);//(*pstu).name
printf("    请选择学生的性别(1.男  2.女):");
while(1 != scanf("%d", &sex) || sex < 1 || sex > 2)
{
printf("    性别选择错误,请重新选择学生的性别(1.男  2.女):");
fflush(stdin);
}
if(1 == sex)
pstu->sex = MAN;
else
pstu->sex = WOMAN;
printf("    请输入学生的年龄(10 ~ 40):");
while(1 != scanf("%d", &pstu->age) || pstu->age < 10 || pstu->age > 40)
{
printf("    年龄输入错误!请重新输入学生的年龄(10 ~ 40):");
fflush(stdin);
}
printf("    请输入学生的成绩(0 ~ 100):");
while(1 != scanf("%f", &pstu->score) || pstu->score < 0 || pstu->score > 100)
{
printf("    成绩输入错误!请重新输入学生的成绩(0 ~ 100):");
fflush(stdin);
}
printf("    请输入学生的户籍地(某某省某某市):");
scanf("%20s", pstu->census);
pstu->next = NULL;
return pstu;
}
NEWSTUDENT GetPrev(int StuId){//获取上一个节点
NEWSTUDENT pstu = ⊤
while(pstu->next)
{
if(pstu->next->StuId == StuId)
return pstu;
pstu = pstu->next;
}
return NULL;
}
int AddStu(NEWSTUDENT pstu){//添加学生

NEWSTUDENT ps = ⊤
if(!pstu)
{
    return 0;
}
//判断一下该学生信息是不是已经存在
if(GetPrev(pstu->StuId))
{
    printf("    学号为%d的学生信息已经存在!\n", pstu->StuId);
    free(pstu);//释放该节点内存空间
    return 0;
}
//while循环的作用是找到当前链表的最后一个节点
while(ps->next)
    ps = ps->next;
//把新节点加入到最后那个节点的后面
ps->next = pstu;
pstu->next = NULL;
return 1;

}
void ShowAll(){//显示所有学生的信息
NEWSTUDENT pstu = ⊤
printf("    ★☆\t\t\t所有学生的信息           \t\t☆★\n");
printf("    ╔══════╦════╦═══╦═══╦════╦═════════╗\n");
printf("    ║   学号     ║  姓名  ║ 性别 ║ 年龄 ║  成绩  ║      户籍地      ║\n");
printf("    ╠══════╬════╬═══╬═══╬════╬═════════╣\n");
printf("    ║1662030108  ║ 林某帅 ║  男  ║  20  ║  50.0  ║  广东省中山市    ║\n");
printf("    ╠══════╬════╬═══╬═══╬════╬═════════╣\n");
while(pstu->next)
{
printf("    ║%d", pstu->next->StuId);
printf("  ║ %s", pstu->next->StuName);
printf(" ║  %s", pstu->next->sex == MAN ? "男" : "女");
printf("  ║  %d", pstu->next->age);
printf("  ║  %.1f", pstu->next->score);
printf("  ║      %s      ║\n", pstu->next->census);
pstu = pstu->next;//让指针指向下一个节点
}
printf("    ╚══════╩════╩═══╩═══╩════╩═════════╝\n");
}
void DeleteStu(int StuId){//用学号删除某个学生
NEWSTUDENT pstu, ptmp;
if(pstu = GetPrev(StuId))
{
if(!Question("    确定要删除该学生信息吗?"))
{
return;
}
ptmp = pstu->next;
pstu->next = ptmp->next;
free(ptmp);
printf("    删除了学号为%d的学生信息。\n", StuId);
}
else
{
printf("    没有找到学号为%d的学生信息。\n", StuId);
}
}
int getStuId(){//获取用户输入的学生的学号
int StuId;
printf("    请输入学生的学号(10位学号):");
while(1 != scanf("%d", &StuId))
{
printf("    学号输入错误!请重新输入学生的学号(10位学号):");
fflush(stdin);
}
return StuId;
}
void ReviseStu(int StuId){//修改某个学生的信息
NEWSTUDENT pstu = GetPrev(StuId);//获取要修改的学生节点的上一个节点
int choose;
if(!pstu)
{
printf("    没有学号为%d的学生信息。\n", StuId);
return;
}
pstu = pstu->next;//将要修改的学员节点的指针改为指向自己的
printf("    当前学生的姓名为%s,", pstu->StuName);
if(Question("    确定要修改吗?"))
{
printf("    请输入学生的姓名(小于20字符):");
scanf("%20s", pstu->StuName);
}
printf("    当前学生的性别为%s,", pstu->sex == MAN ? "男" : "女");
if(Question("    确定要修改吗?"))
{
printf("    请输入学生的性别(1.男 2.女):");
while(1 != scanf("%d", &choose) || choose < 1 || choose > 2)
{
printf("    输入错误,请重新输入学生的性别(1.男 2.女):");
fflush(stdin);
}
if(1 == choose)
pstu->sex = MAN;
else
pstu->sex = WOMAN;
}
printf("    当前学生的年龄为%d,", pstu->age);
if(Question("    确定要修改吗?"))
{
printf("    请输入学生的年龄(10 ~ 40):");
while(1 != scanf("%d", &pstu->age) || pstu->age < 10 || pstu->age > 40)
{
printf("    年龄输入错误!请重新输入学生的年龄(10 ~ 40):");
fflush(stdin);
}
}
printf("    当前学生的成绩为%.1f,", pstu->score);
if(Question("    确定要修改吗?"))
{
printf("    请输入学生的成绩(0 ~ 100):");
while(1 != scanf("%f", &pstu->score) || pstu->score < 10 || pstu->score > 40)
{
printf("    成绩输入错误!请重新输入学生的成绩(0 ~ 100):");
fflush(stdin);
}
}
printf("    当前学生的户籍地为%s,", pstu->census);
if(Question("    确定要修改吗?"))
{
printf("    请输入学生的户籍地(某某省某某市:");
scanf("%20s", pstu->census);
}
printf("    修改完毕!\n");
}
void SearchStu(int StuId) {//查询某个学生的信息
NEWSTUDENT pstu = GetPrev(StuId);
pstu = pstu->next;
printf("    ★☆\t\t\t当前学生的信息           \t\t☆★\n");
printf("    ╔══════╦════╦═══╦═══╦════╦═════════╗\n");
printf("    ║   学号     ║  姓名  ║ 性别 ║ 年龄 ║  成绩  ║      户籍地      ║\n");
printf("    ╠══════╬════╬═══╬═══╬════╬═════════╣\n");
printf("    ║%d", pstu->next->StuId);
printf("    ║%d", pstu->StuName);
printf("  ║ %s", pstu->sex == MAN ? "男" : "女");
printf("  ║  %d", pstu->age);
printf("  ║  %.1f", pstu->score);
printf("  ║      %s      ║\n", pstu->census);
printf("    ╚══════╩════╩═══╩═══╩════╩═════════╝\n");
}
int Question(const char *pstr){//请求用户是否进行下一步的操作
char answer;
printf("%s请选择(y or n):", pstr);
while(1 != scanf(" %c", &answer) || (answer != 'y' && answer != 'n'))
{
printf("    输入错误!%s请重新选择(y or n):", pstr);
fflush(stdin);//清空输入缓冲区,C库函数
}
if('y' == answer)
return 1;
else
return 0;
}

这个学生成绩管理代码那个学号的个数怎么修改,还有我们要求成绩是分开的,但是这个只有一个还不显示是哪科成绩,求大佬告知,并且帮我看下那个查找信息那个用x

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

JuncoJet 发表于 2019-12-31 15:34
写的花里花哨的,命令行程序单线程还强行循环Sleep(1000);
zhuweiyu 发表于 2019-12-31 15:41
大一开学才半年 就搞这么牛逼的东西 佩服 我当初也混了吧
大巧不工lz 发表于 2019-12-31 16:08
无限苦肉盖神 发表于 2019-12-31 19:18
学过c++的大四党表示,这个我也不会哈,平时作业都是百度的。不过用java来做这个系统的话,倒是挺简单的,虽然学校没教java。
刘曰天 发表于 2019-12-31 19:39
你这个学号使用int存储的,而int的表示范围是正负21亿,正好10位数;所以你的学号最多可以是10位,如果想增加位数,可以将学号用double存储。
沉默的菜鸟 发表于 2019-12-31 20:52
哥们,你先把你的代码格式化一下
 楼主| dai15234791133 发表于 2020-1-2 12:52
沉默的菜鸟 发表于 2019-12-31 20:52
哥们,你先把你的代码格式化一下

怎么格式化呢第一次发帖不会啊
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-27 00:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表