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

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

下面展示代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
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语言课程设计——学生选课管理系统相关推荐

  1. 学生选课管理系统c语言程序报告,c语言课程设计学生选课管理系统实验报告.doc...

    课程设计报告 课程设计题目:学生选课管理系统 学 号 姓 名:李唐松 专 业:软件工程 班 级: 091107 指导老师:谢小林 2009年1月5 *实验题目: 学分管理程序 *实验时间与地点:200 ...

  2. C语言课程设计——学生考勤管理系统

    C语言课程设计--学生考勤管理系统 题目要求: 学生考勤管理系统设计 (1)问题描述 考勤信息记录了学生的缺课情况,它包括:缺课日期.第几节课.课程名称.学生姓名.缺课类型(迟到.早退.请假及旷课). ...

  3. 查询学生选修课程管理系统java_JAVA数据库课程设计学生选课管理系统的

    <JAVA数据库课程设计学生选课管理系统的>由会员分享,可在线阅读,更多相关<JAVA数据库课程设计学生选课管理系统的(59页珍藏版)>请在人人文库网上搜索. 1.一.课程设计 ...

  4. c语言课程设计查找分数与删除元素,c语言课程设计学生成绩管理系统

    <c语言课程设计学生成绩管理系统>由会员分享,可在线阅读,更多相关<c语言课程设计学生成绩管理系统(31页珍藏版)>请在人人文库网上搜索. 1.河南理工大学计算机科学与技术学院 ...

  5. C语言成绩统计源代码,C语言课程设计学生成绩管理系统+源码

    <C语言课程设计学生成绩管理系统+源码>由会员分享,可在线阅读,更多相关<C语言课程设计学生成绩管理系统+源码(25页珍藏版)>请在人人文库网上搜索. 1.简易教学管理系统的设 ...

  6. C语言学生成绩管理设计总结,C语言课程设计学生成绩管理系统个人总结

    C语言课程设计学生成绩管理系统个人总结 C语言课程设计--学生成绩管理系统 个人心得体会 (徐州工程学院 14计嵌1班 07组 张凯) 这一周以来的课程设计,不仅让我明白了C语言的确是一门很有用的,但 ...

  7. C语言课程信息管理系统课程设计,c语言课程设计学生信息管理系统.doc

    c语言课程设计学生信息管理系统 课程设计报告 课程名称: 高级语言程序设计课程设计 姓 名: 汤璞君 班级学号: BX1209 121003410937 指导教师: 吉顺如 完成日期: 2013.6. ...

  8. c语言学生档案管理课设作业,2019-2020年c语言课程设计学生档案管理系统实验报告.doc...

    2019-2020年c语言课程设计学生档案管理系统实验报告.doc 还剩 10页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: *********C 语 ...

  9. 班级学籍管理系统c语言论文,c语言课程设计学生学籍管理系统论文.doc

    c语言课程设计学生学籍管理系统论文 PAGE PAGE 2 1. 课题的主要功能 1.1 需求分析. 程序的功能: 对一个有N个学生的班级,通过该系统实现对该班级学生的基本信息进行录入.显示.修改.删 ...

  10. 数据库课程设计-----------学生选课管理系统的设计

    由于时间关系,里面许多图片都已经变形或错位 课程设计(学年论文) 题目:学生选课管理系统的设计与实现 系    院计算机科学技术系 专    业计算机科学与技术 班    级 姓    名 学    ...

最新文章

  1. HDU 1008 Elevator
  2. 成功解决return tf.nn.softmax(x, axis=axis) TypeError: softmax() got an unexpected keyword argument 'axis
  3. BOOST_VMD_ASSERT宏相关的测试程序
  4. 关于构造与析构过程中调用虚函数的问题
  5. 移动端判断手机横竖屏状态
  6. kubernetes(k8s)
  7. 实现WinForm窗体的美化(借助第三方控件)
  8. oracle 11g 卸载  客户端卸载
  9. Android第四十二期 - 关于微信手势退出Activity的操作
  10. GRE改革预测及应对剖析
  11. seaweedfs java api_seaweedfs代码详解
  12. 如何配置企业微信开发者
  13. RFC1180 TCP/IP指南
  14. 百度竞价有没有好的推广方法?
  15. redmi路由器是linux,拯救小米路由器硬盘数据的方法及软件下载
  16. 仿ios相机apk_iCamera摄像头下载|iCamera仿苹果相机安卓版v4.0下载 _当游网
  17. Golang底层原理剖析之panic与recover
  18. (已解决)vue数组添加数据后页面无法实时渲染
  19. 关于最近的总结(收心)
  20. websocket封装,有心跳和断开重联功能

热门文章

  1. Python用可变参数找出最大值和最小值
  2. hadoop 2.7.3 源码编译教程
  3. php+pdo分页类
  4. vue环境搭建(ubuntu)
  5. 详尽Ubuntu18安装搜狗输入法教程
  6. js事件的冒泡(bubble)机制说明
  7. java中的线程方面的面试题_Java线程类相关面试题与答案总结
  8. 有了linux基础还学习学哪些,学linux的前途和好处有哪些
  9. 类对象和类指针以及类的内存分布
  10. win10 使用cmake编译opencv源码生成VS工程(二)