第一次c语言课程设计——学生选课管理系统

本次课程设计是实现了一个简单的学生选课系统,里面分为了学生,老师,管理员三个角色,分别可以通过各自的账号进入各自的系统,执行各自的功能。比如学生只能查询课程信息,查看成绩,根据学分查询,而老师可以录入,修改,打印学生的成绩,还能查看学生信息,管理员则是录入学生、选课、课程信息。

该系统的账号密码,学生信息,选课信息,课程信息全都采用文件保存,且系统只能添加或查询信息,删除则需要自己进入文件删除,并且自己创建文件并和代码放在同一个文件夹下。

下面展示代码

#include
#include
#include
struct sysuser//账号结构 
{
    char username [20]; 
    char password [8];
};
struct course//课程信息 
{
    char num[10];/*课程号*/
    char name [30];/*课程名*/
    int credit;/*学分*/
};
struct student//学生信息
{
    char num[12];/*学号*/
    char name [10];/*姓名*/
    char sex [2];/*性别*/
    char subject [30];/*专业*/ 
};
struct Ccourse//选课信息
{
    char num[10];/*课程号*/
    char Snum[12];/*学号*/
    int grade;/*成绩*/ 
};
int checkuser (struct sysuser *psu);//检查账户函数 
void Students();//学生系统函数 
void Teacher();//教师系统函数 
void Admin();//管理员系统函数 
void rcourse();//查询课程信息函数 
void rstudent();//查询成绩函数 
void rcredit();//按学分查询函数 
void wsg();//录入成绩函数 
void resg();//修改成绩函数  
void psg();//打印成绩函数 
void aws();//录入学生信息函数 
void awc();//录入课程信息函数 
void ars();//查询学生信息函数 
void awCc();//录入选课信息函数 
int main()
{
    int n,w=1;
    int n1;
    struct sysuser su;
    do//循环实现重复登入 
    {
        system("cls");//清屏 
        printf("\n\n\t\t**********菜单**********\n\n");
        printf("\t\t1.登入\n");
        printf("\t\t2.退出程序\n\t\t");
        scanf("%d",&n1);
        if(n1==1)
        {
            system("cls");
            puts("\n\n\t\t**********请登入**********\n\n");
            printf("\t\t账号:");
            scanf("%s",su.username);//保存账号 
            printf("\t\t密码:");
            scanf("%s",su.password);//保存密码 
            n=checkuser(&su);
            switch(n)
            {
                case 0:
                    system("cls");
                    printf("\n\n\t\t用户不存在或密码错误!\n");
                    printf("\t\t按任意键返回登入界面\n\t\t");
                    system("pause");
                    break;
                case 1://进入学生系统 
                    Students();
                    break;
                case 2://进入教师系统 
                    Teacher();
                    break;
                case 3://进入管理员系统 
                    Admin();
                    break;
            }
        }
        else
        {
            break;//结束循环 
        }
    }
    while(w==1);
    return 0; 
}
int checkuser (struct sysuser *psu)//检查账户函数 
{
    FILE *fp;
    char usr [30],usr1 [30],pwd [10];
    int i,check=0;
    strcpy(usr,psu->username);/*储存账号*/ 
    strcpy(pwd,psu->password);/*储存密码*/ 
    strcat(usr," ");strcat(usr,pwd);strcat(usr,"\n");/*连接账号与密码,用于在文件中匹配*/ 
    for(i=1;i<=3;i++)
    {
        if(i==1)
        {
            if((fp=fopen("stu.txt","a+"))==NULL)/*打开学生密码数据库*/ 
            {
                printf("打开文件时发生错误!\n");
                exit(0);
            }
        }
        else if(i==2)
        {
            if((fp=fopen("teacher.txt","a+"))==NULL)/*打开教师密码数据库*/ 
            {
                printf("打开文件时发生错误!\n");
                exit(0);
            }
        }
        else
        {
            if((fp=fopen("admin.txt","a+"))==NULL)/*打开管理员密码数据库*/ 
            {
                printf("打开文件时发生错误!\n");
                exit(0);
            }
        }
        while(!feof(fp))/*遍历判断账号是否合法*/ 
        {
            fgets(usr1,30,fp);/*读入一行账户数据字符串到usr1*/ 
            if(strcmp(usr,usr1)==0)/*比较判断usr与usr1是否相同*/ 
            {
                check=i;/*储存用户类型数据*/ 
                break;
            }
        }
        if(check!=0)
        {
            break;
        }
        fclose(fp);
    }
    fclose(fp);//关闭文件 
    return check;//返回用户类型(1:学生,2:教师,3:管理员,0:用户不存在或密码错误) 
}
void Students()//学生系统函数 
{
    int w=1;
    char n;
    char CH;
    do//循环使功能结束后返回菜单 
    {
        system("cls");
        printf("\n\n\t\t**********学生菜单**********\n\n");
        printf("\t\t1.查询课程信息\n");
        printf("\t\t2.查询成绩\n");
        printf("\t\t3.按学分查询课程\n"); 
        printf("\t\t4.返回登入界面\n");
        CH=getchar();
        scanf("%c",&n);
        if(n=='1')
        {
            rcourse();//查询课程函数 
        }
        else if(n=='2')
        {
            rstudent();//查询成绩函数 
        }
        else if(n=='3')
        {
            rcredit();//按学分查询函数 
        }
        else
        {
            break;//结束循环 
        }
        system("pause");
    }
    while(w==1);
}
void Teacher()//教师系统函数 
{
    int w=1;
    char n;
    char CH;
    do//循环使功能结束后返回菜单 
    {
        system("cls");
        printf("\n\n\t\t**********教师菜单**********\n\n");
        printf("\t\t1.录入学生成绩\n");
        printf("\t\t2.修改学生成绩\n");
        printf("\t\t3.打印学生成绩单\n");
        printf("\t\t4.返回登入界面\n\t\t");
        CH=getchar();
        scanf("%c",&n);
        if(n=='1')
        {
            wsg();//录入成绩函数 
        }
        else if(n=='2')
        {
            resg();//修改成绩函数 
        }
        else if(n=='3')
        {
            psg();//打印成绩函数 
        }
        else
        {
            break;//结束循环 
        }
    printf("\n\t\t");
    system("pause");
    }
    while(w==1);
}
void Admin()//管理员系统 
{
    int w=1;
    char n;
    char CH;
    do//循环使功能结束后返回菜单 
    {
        system("cls");
        printf("\n\n\t\t**********管理员菜单**********\n\n");
        printf("\t\t1.录入学生信息\n");
        printf("\t\t2.录入课程信息\n");
        printf("\t\t3.查询学生信息\n");
        printf("\t\t4.录入选课信息\n");
        printf("\t\t5.返回登入界面\n\t\t");
        CH=getchar();
        scanf("%c",&n);
        if(n=='1')
        {
            aws();//录入学生信息函数 
        }
        else if(n=='2')
        {
            awc();//录入课程信息函数 
        }
        else if(n=='3')
        {
            ars();//查询学生信息函数 
        }
        else if(n=='4')
        {
            awCc();//录入选课信息函数 
        }
        else
        {
            break;//结束循环 
        }
    }
    while(w==1);
}
void rcourse()//查询课程信息函数 
{
    FILE *fp1,*fp2;
    struct Ccourse a1;
    struct course a2; 
    int CN1,CN2;
    char snum[12];
    CN1=CN2=0;/*检查结果变量,初始化为0*/ 
    fp1=fopen("Ccourse.txt","ab+");/*二进制打开文件“Ccourse.txt”读入*/ 
    fp2=fopen("course.txt","ab+");/*二进制打开文件“course.txt”读入*/
    system("cls");
    printf("\n\n\t\t********************\n\n\t\t");
    printf("请输入您的学号:");
    scanf("%s",snum);
    while(!feof(fp1))//遍历文件 
    {
        fscanf(fp1,"%s %s %d",a1.num,a1.Snum,&a1.grade);
        if(strcmp(a1.Snum,snum)==0)//判断 
        {
            CN1=1;
            break;
        }
    }
    if(CN1==1)
    {
        while(!feof(fp2))//遍历文件寻找对应信息 
        {
            fscanf(fp2,"%s %s %d",a2.name,a2.num,&a2.credit);
            if(strcmp(a1.num,a2.num)==0)
            {
                CN2=1;
                break;
            }
        }
        if(CN2==1)
        {
            printf("\t\t课程名:%s\n\t\t课程号:%s\n\t\t学分:%d\n\t\t",a2.name,a2.num,a2.credit);
        }
        else
        {
            printf("\t\t查无课程信息\n\t\t");
        }
    }
    else
    {
        printf("\t\t查无课程信息\n\t\t");
    }
    fclose(fp1);
    fclose(fp2);
}
void rstudent()//查询成绩函数 
{
    FILE *fp1;
    char snum[12];
    int CN1=0;
    struct Ccourse a1;
    fp1=fopen("Ccourse.txt","rb");
    system("cls");
    printf("\n\n\t\t******************************\n\n\t\t");
    printf("请输入您的学号:");
    scanf("%s",snum);
    while(!feof(fp1))//遍历文件 
    {
        fscanf(fp1,"%s %s %d\n",a1.num,a1.Snum,&a1.grade);
        if(strcmp(a1.Snum,snum)==0)
        {
            CN1=1;
            break;
        }
    }
    if(CN1==1)
    {
        printf("\t\t你的成绩:%d\n\t\t",a1.grade);
    }
    else
    {
        printf("\t\t查无成绩\n\t\t"); 
    }
    fclose(fp1); 
}
void rcredit()//按学分查询函数
{
    FILE *fp1;
    int credit;
    int CN1=0;
    struct course a1;
    fp1=fopen("course.txt","rb");
    system("cls");
    printf("\n\n\t\t******************************\n\n\t\t");
    printf("请输入学分:");
    scanf("%d",&credit);
    while(!feof(fp1))//遍历文件
    {
        fscanf(fp1,"%s %s %d\n",a1.name,a1.num,&a1.credit);
        if(credit==a1.credit)
        {
            CN1=1;
            break;
        }    
    } 
    if(CN1==1)
    {
        printf("\t\t课程:%s\n\t\t",a1.name);
    }
    else 
    {
        printf("\t\t查无课程\n\t\t");
    }
    fclose(fp1);

void wsg()//录入学生成绩函数 
{
    system("cls");
    char Snum[12];
    FILE *fp1,*fp2;
    int n;
    int CN1=0;
    char grade[3];
    struct Ccourse a1;
    printf("\n\n\t\t**********录入成绩**********\n\n\t\t");
    printf("1.按学号录入\n\t\t");;
    printf("2.返回教师菜单\n\t\t");
    scanf("%d",&n);
    if(n==1)
    {
        system("cls");
        fp1=fopen("Ccourse.txt","rb+");
        printf("\n\n\t\t**********录入成绩**********\n\n\t\t");
        printf("请输入学号:");
        scanf("%s",&Snum);
        while(!feof(fp1))//遍历文件 
        {
            fscanf(fp1,"%s %s %d\n",a1.num,a1.Snum,&a1.grade);
            if(strcmp(a1.Snum,Snum)==0)//比较找出对应信息 
            {
                CN1=1;
                break;
            }
        }
        if(CN1==1)
        {
            system("cls");
            printf("\n\n\t\t**********录入成绩**********\n\n\t\t");
            printf("学号:%s\n",Snum);
            printf("\t\t课程号:%s\n",a1.num);
            printf("\t\t请输入成绩:");
            scanf("%s",grade);
            fseek(fp1,-10L,1);
            fprintf(fp1,"%s %s %s\n",a1.num,a1.Snum,grade);//写入文件 
            printf("\t\t已录入"); 
        }
        else
        {
            system("cls");
            printf("\n\n\t\t******************************\n\n\t\t");
            printf("学号不存在");
        }
        fclose(fp1);
    }
}
void resg()//修改学生成绩 
{
    system("cls");
    char Snum[12];
    char grade[3];
    struct Ccourse a1;
    FILE *fp1;
    int CN1=0;
    fp1=fopen("Ccourse.txt","rb+");
    printf("\n\n\t\t**********修改成绩**********\n\n\t\t");
    printf("请输入学号:");
    scanf("%s",&Snum);
    while(!feof(fp1))//遍历文件 
    {
        fscanf(fp1,"%s %s %d\n",a1.num,a1.Snum,&a1.grade);
        if(strcmp(a1.Snum,Snum)==0)//找出对应账号 
        {
            CN1=1;
            break;
        }
    }
    if(CN1==1)
    {
        system("cls");
        printf("\n\n\t\t******************************\n\n\t\t");
        printf("学号:%s\n",Snum);
        printf("\t\t课程号:%s\n",a1.num);
        printf("\t\t当前成绩:%d\n",a1.grade);
        printf("\t\t请输入修改后成绩:");
        scanf("%s",grade);
        fseek(fp1,-10L,1);
        fprintf(fp1,"%s %s %s\n",a1.num,a1.Snum,grade);//写入文件 
        printf("\t\t已修改"); 
    }
    else
    {
        system("cls");
        printf("\n\n\t\t******************************\n\n\t\t");
        printf("学号不存在");
    }
    fclose(fp1);
}
void psg()//打印学生成绩 
{
    system("cls");
    char Snum[12];
    struct Ccourse a1;
    struct student a2; 
    FILE *fp1,*fp2;
    int CN1,CN2;
    CN1=CN2=0;
    fp1=fopen("Ccourse.txt","rb");
    fp2=fopen("student.txt","rb");
    printf("\n\n\t\t**********打印学生成绩**********\n\n\t\t");
    printf("请输入学号:");
    scanf("%s",&Snum);
    while(!feof(fp1))
    {
        fscanf(fp1,"%s %s %d",a1.num,a1.Snum,&a1.grade);
        if(strcmp(a1.Snum,Snum)==0)
        {
            CN1=1;
            break;
        }
    }
    if(CN1==1)
    {
        while(!feof(fp2))
        {
            fscanf(fp2,"%s %s %s %s\n",a2.name,a2.num,a2.sex,a2.subject);
            if(strcmp(a1.Snum,a2.num)==0)
            {
                CN2=1;
                break;
            }
        }
        if(CN2==1)
        {
            system("cls");
            printf("\n\n\t\t******************************\n\n\t\t");
            printf("姓名:%s\n",a2.name);
            printf("\t\t学号:%s\n",Snum);
            printf("\t\t课程号:%s\n",a1.num);
            printf("\t\t成绩:%d\n",a1.grade);
        }
        else
        {
            printf("\n查无成绩信息\n\t\t");
        }
    }
    else
    {
        printf("\n查无成绩信息\n\t\t");
    }
    fclose(fp1);
    fclose(fp2);
}
void aws()//录入学生信息函数 
{
    system("cls");
    FILE *fp1;
    int w=1;
    struct student a1;
    fp1=fopen("student.txt","ab+");
    do
    {
        system("cls");
        printf("\n\n\t\t**********录入学生信息**********\n\n\t\t");
        printf("请输入学号:");
        scanf("%s",a1.num);
        printf("\t\t请输入姓名:");
        scanf("%s",a1.name);
        printf("\t\t请输入性别:");
        scanf("%s",a1.sex);
        printf("\t\t请输入课程名:");
        scanf("%s",a1.subject);
        fprintf(fp1,"%s %s %s %s\n",a1.name,a1.num,a1.sex,a1.subject);
        printf("\t\t已录入\n\t\t1.继续录入\n\t\t2.结束录入\n\t\t");
        scanf("%d",&w);
    }
    while(w==1);
    fclose(fp1);
}
void awc()//录入课程信息函数 
{
    system("cls");
    FILE *fp1;
    int w=1;
    struct course a1;
    fp1=fopen("course.txt","ab+");
    do
    {
        printf("\n\n\t\t**********录入课程信息**********\n\n\t\t");
        printf("请输入课程名:");
        scanf("%s",a1.name);
        printf("\t\t请输入课程号:");
        scanf("%s",a1.num);
        printf("\t\t请输入学分:");
        scanf("%d",&a1.credit);
        fprintf(fp1,"%s %s %d\n",a1.name,a1.num,a1.credit);
        printf("\t\t已录入\n\t\t1.继续录入\n\t\t2.结束录入\n\t\t");
        scanf("%d",&w);
    }
    while(w==1);
    fclose(fp1);
}
void ars()//查询学生信息函数 
{
    system("cls");
    FILE *fp1;
    int w=1;
    int CN1;
    struct student a1;
    char snum[12]; 
    fp1=fopen("student.txt","ab+");
    do
    {
        CN1=0;
        system("cls");
        printf("\n\n\t\t**********查询学生信息**********\n\n\t\t");
        printf("请输入学号:");
        scanf("%s",snum);
        while(!feof(fp1))
        {
            fscanf(fp1,"%s %s %s %s\n",a1.name,a1.num,a1.sex,a1.subject);
            if(strcmp(a1.num,snum)==0)
            {
                CN1=1;
                break;
            }
        }
        if(CN1==1)
        {
            printf("\t\t姓名:%s\n",a1.name);
            printf("\t\t学号:%s\n",a1.num);
            printf("\t\t性别:%s\n",a1.sex);
            printf("\t\t课程:%s\n",a1.subject);
        }
        else
        {
            printf("\t\t查无信息\n");
        }
        printf("\t\t已查询\n\t\t1.继续查询\n\t\t2.结束查询\n\t\t");
        scanf("%d",&w);
        rewind(fp1);
    }
    while(w==1);
    fclose(fp1);
}
void awCc()//录入选课信息函数 
{
    FILE *fp1,*fp2,*fp3;
    struct student a1;
    struct course a2;
    struct Ccourse a3;
    fp1=fopen("student.txt","ab+");
    fp2=fopen("course.txt","ab+");
    fp3=fopen("Ccourse.txt","wb");
    while(!feof(fp1))
    {
        fscanf(fp1,"%s %s %s %s\n",a1.name,a1.num,a1.sex,a1.subject);
        while(!feof(fp2))
        {
            fscanf(fp2,"%s %s %d\n",a2.name,a2.num,&a2.credit);
            if(strcmp(a1.subject,a2.name)==0)
            {
                strcpy(a3.Snum,a1.num);
                strcpy(a3.num,a2.num);
                fprintf(fp3,"%s %s %s\n",a3.num,a3.Snum,"000");
            }
        }
        rewind(fp2);
    }
    fclose(fp1);
    fclose(fp2);
    fclose(fp3);
    printf("\n\n\t\t已录入\n\t\t");
    system("pause"); 
}
 

此为学习一学期C语言后写的程序,不能说很好,只能说也顺利的帮自己过了课程设计,也有些冗余,希望多多改进

你可能感兴趣的:(c语言)