C语言程序设计——学生成绩管理系统 设计与实现(实现篇)

大一下学期写的C语言程序设计实验报告——学生成绩管理系统课程设计与实现

此篇为“实现篇”o~

目录

 一、界面效果

二、代码实现

 一、界面效果

1.登录账号

2.注册账号

3.登录成功选择用户端

4.进入教师端

5.录入信息

6.浏览信息

7.删除信息

8.修改信息

9.查找信息

10.排序成绩

11.进入学生端,根据学号查找信息

12.学生端,浏览班级成绩排名

二、代码实现

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student
{
    char name[20];
    char num[20];
    int math;
    int Cgrade;
    int English;
    int total;
};
struct teacher
{
    char ac[30];//账号
    char pw[30];//密码
};
struct teacher tea[50];
struct Node
{
    struct student data;
    struct Node *next;
};
struct Node *createList()
{
    struct Node *listHeadNode=(struct Node*)malloc(sizeof(struct Node));
    listHeadNode->next=NULL;
    return listHeadNode;
};
struct Node* list=NULL;
struct Node *createNode(struct student data)
{
    struct Node *newNode=(struct Node*)malloc(sizeof(struct Node));
    newNode->data=data;
    newNode->next=NULL;
    return newNode;
};

//插入链表   录入信息
void insertNodeByHead(struct Node* listHeadNode,struct student data)
{
    struct Node *newNode=createNode(data);
    newNode->next=listHeadNode->next;
    listHeadNode->next=newNode;

}
//删除信息
void deleteNodeByAppoinNum(struct Node* listHeadNode,char* num)
{
    struct Node* posFrontNode=listHeadNode;
    struct Node* posNode=listHeadNode->next;
    if(posNode==NULL)
    {
        printf("无相关内容,无法删除!\n");
    }
    else
    {
        while(strcmp(posNode->data.num,num))
        {
            posFrontNode=posNode;
            posNode=posFrontNode->next;
            if(posNode==NULL)
            {
                printf("无相关内容,无法删除!\n");
            }
        }
        posFrontNode->next=posNode->next;
        free(posNode);
        printf("信息删除成功!\n");

    }

}
// 按总分从高到低排序学生成绩
struct Node *sortStudentListByTotal(struct Node *listHeadNode)
{
    if(listHeadNode != NULL)
    {
        struct Node *p1, *p2, *max;
        struct student s;

        p1 = listHeadNode;
        // 简单选择排序
        // 直接交换信息,不改变结点
        while((p1=p1->next) != NULL)
        {
            max = p1;
            p2 = p1;
            while((p2=p2->next) != NULL)
            {
                if((p2->data).total > (max->data).total)
                    max = p2;
            }

            if(max != p1)
            {
                s = p1->data;
                p1->data = max->data;
                max->data = s;
            }
        }
    }
    return listHeadNode;
}
//根据学号查找信息
struct Node* searchNodeByAppoinNum(struct Node* listHeadNode,char* num)
{
    struct Node* pMove=listHeadNode->next;
    if(pMove==NULL)
    {
        return pMove;
    }
    else
    {
        while(strcmp(pMove->data.num,num))
        {
            pMove=pMove->next;
            if(pMove==NULL)
            {
                break;
            }
        }
        return pMove;
    }
};
//打印当前信息
void printNode(struct Node* curNode)
{
    printf("学号  姓名  数学  C语言  英语  总成绩\n");
    printf(" %s    %s    %d    %d     %d     %d\n",curNode->data.num,curNode->data.name,curNode->data.math,curNode->data.Cgrade,curNode->data.English,curNode->data.total);
}
//打印 浏览信息
void printList(struct Node* listHeadNode)
{

    struct Node* pMove=listHeadNode->next;
    printf("学号  姓名  数学  C语言  英语  总成绩\n");
    while (pMove)
    {
        printf(" %s    %s    %d    %d     %d     %d\n",pMove->data.num,pMove->data.name,pMove->data.math,pMove->data.Cgrade,pMove->data.English,pMove->data.total);
        pMove=pMove->next;
    }
    printf("\n");

}
//从文件中读取信息
void readInfoFromFile(char *fileName,struct Node* listHeadNode)
{
    FILE* fp=fopen(fileName,"r");
    if(fp==NULL)
    {
        fp=fopen(fileName,"w");
    }
    struct student tempData;
    while(fscanf(fp,"%s\t%s\t%d\t%d\t%d\t%d",tempData.num,tempData.name,&tempData.math,&tempData.Cgrade,&tempData.English,&tempData.total)!=EOF)
    {
        insertNodeByHead(listHeadNode,tempData);
        memset(&tempData,0,sizeof(tempData));
    }
    fclose(fp);
}
//保存到文件
void saveInfoToFile(char *fileName,struct Node* listHeadNode)
{
    FILE* fp=fopen(fileName,"w");
    struct Node* pMove=listHeadNode->next;

    while (pMove)
    {
        fprintf(fp,"%s\t%s\t%d\t%d\t%d\t%d\n",pMove->data.num,pMove->data.name,pMove->data.math,pMove->data.Cgrade,pMove->data.English,pMove->data.total);
        pMove=pMove->next;
    }
    fclose(fp);
}
//系统菜单
void Menu()
{
    printf("---------------【学生管理系统】---------------\n\n");
    printf("\t\t0.退出系统\n");
    printf("\t\t1.教师端\n");
    printf("\t\t2.学生端\n");
    printf("\t\t3.退出登录\n");
    printf("----------------------------------------------\n");
    printf("请选择身份(请输入0-3):");
}
//系统菜单功能
void Key()
{
    int userKey;
    struct student tempData;
    scanf("%d",&userKey);
    switch(userKey)
    {
    case 0:
        printf("\t\t【退出系统】\n");
        system("pause");
        exit(0);
        break;
    case 1:
        while(1)
        {
            system("cls");
            systemMenu();
            keyDown();
            system("pause");
        }

        break;
    case 2:
        while(1)
        {
            system("cls");
            stuMenu();
            stuKeyDown();
            system("pause");
        }

        break;
    case 3:
        while(1)
        {
            system("cls");
            Hello();
            system("pause");
        }

        break;
    default:
        printf("输入错误!请重新输入:");
        break;
    }

}
//学生菜单
void stuMenu()
{
    printf("---------------【学生管理系统】---------------\n\n");
    printf("------------------【学生端】------------------\n\n");
    printf("\t\t0.退出系统\n");
    printf("\t\t1.查询成绩\n");
    printf("\t\t2.浏览成绩\n");
    printf("\t\t3.返回主菜单\n");
    printf("----------------------------------------------\n");
    printf("请输入(0-3):");
}
//学生菜单功能
void stuKeyDown()
{
    int userKey;
    struct student tempData;
    scanf("%d",&userKey);
    switch(userKey)
    {
    case 0:
        printf("\t\t【退出系统】\n");
        system("pause");
        exit(0);
        break;
    case 1:
        printf("\t\t【查找信息】\n");
        printf("请输入查找的学号:");
        scanf("%s",tempData.num);
        if(searchNodeByAppoinNum(list,tempData.num)==NULL)
        {
            printf("未找到相关信息!\n");
        }
        else
        {
            printNode(searchNodeByAppoinNum(list,tempData.num));

        }
        break;
    case 2:
        printf("\t\t【浏览成绩】\n");
        printf("总成绩由高到低排序为:\n");
        sortStudentListByTotal(list);
        printList(list);
        break;
    case 3:
        //printf("\t\t【返回主菜单】\n");
        while(1)
        {
            system("cls");
            Menu();
            Key();
            system("pause");

        }
        break;
    default:
        printf("输入错误!请重新输入:");
        break;
    }

}
//教师菜单
void systemMenu()
{
    printf("---------------【学生管理系统】---------------\n\n");
    printf("------------------【教师端】------------------\n\n");
    printf("\t\t0.退出系统\n");
    printf("\t\t1.录入信息\n");
    printf("\t\t2.浏览信息\n");
    printf("\t\t3.删除信息\n");
    printf("\t\t4.修改信息\n");
    printf("\t\t5.查找信息\n");
    printf("\t\t6.排序成绩\n");
    printf("\t\t7.返回主菜单\n");
    printf("----------------------------------------------\n");
    printf("请输入(0-7):");
}
//教师菜单功能
void keyDown()
{
    int userKey;
    struct student tempData;
    scanf("%d",&userKey);
    switch(userKey)
    {
    case 0:
        printf("\t\t【退出系统】\n");
        system("pause");
        exit(0);
        break;
    case 1:
        printf("\t\t【录入信息】\n");
        printf("请输入学号 姓名 数学成绩 C成绩 英语成绩:\n");
        scanf("%s%s%d%d%d",tempData.num,tempData.name,&tempData.math,&tempData.Cgrade,&tempData.English);
        tempData.total=tempData.math+tempData.Cgrade+tempData.English;
         //readInfoFromFile("student.txt",list);
         if(searchNodeByAppoinNum(list,tempData.num)!=NULL)
         {
             printf("学号已存在,请重新输入!\n");
         }
         else
         {
             insertNodeByHead(list,tempData);
        saveInfoToFile("student.txt",list);
        printf("学号%s的学生信息添加成功!\n",tempData.num);
         }

        break;
    case 2:
        printf("\t\t【浏览信息】\n");
        /*if(searchNodeByAppoinNum(list,tempData.num)==NULL)
         {
             printf("学生信息为空!\n");
         }*/
        // else
         //{
             printList(list);
         //}
        break;
    case 3:
        printf("\t\t【删除信息】\n");
        printf("请输入要删除的学生学号:\n");
        scanf("%s",tempData.num);
        deleteNodeByAppoinNum(list,tempData.num);
        saveInfoToFile("student.txt",list);

        break;
    case 4:
        printf("\t\t【修改信息】\n");
        printf("请输入要修改的学生学号:\n");
        scanf("%s",tempData.num);
        if(searchNodeByAppoinNum(list,tempData.num)==NULL)
        {
            printf("未找到相关信息!\n");
        }
        else
        {
            struct Node* curNode=searchNodeByAppoinNum(list,tempData.num);
            printf("请输入新的学号 姓名 数学成绩 C成绩 英语成绩:\n");
            scanf("%s%s%d%d%d",curNode->data.num,curNode->data.name,&curNode->data.math,&curNode->data.Cgrade,&curNode->data.English);
            curNode->data.total=curNode->data.math+curNode->data.Cgrade+curNode->data.English;
            saveInfoToFile("student.txt",list);
            printf("学号%s的学生信息修改成功!\n",curNode->data.num);
        }
        break;
    case 5:
        printf("\t\t【查找信息】\n");
        printf("请输入查找的学号:");
        scanf("%s",tempData.num);
        if(searchNodeByAppoinNum(list,tempData.num)==NULL)
        {
            printf("未找到相关信息!\n");
        }
        else
        {
            printNode(searchNodeByAppoinNum(list,tempData.num));

        }
        break;
    case 6:
        printf("\t\t【排序成绩】\n");
        printf("总成绩由高到低排序为:\n");
        sortStudentListByTotal(list);
        printList(list);
        break;
    case 7:
        while(1)
        {
            system("cls");
            Menu();
            Key();
            system("pause");

        }
        break;
    default:
        printf("输入错误!请重新输入:");
        break;
    }
}
//登录界面
void Hello()
{
    int se;
    printf("---------------【学生管理系统】---------------\n\n");
    printf("-----------------【登录界面】-----------------\n\n");
    printf("\t\t0.-退出系统-\n");
    printf("\t\t1.-登录账号-\n");
    printf("\t\t2.-注册账号-\n\n");
    printf("-----------------【欢迎使用】-----------------\n\n");
    printf("请输入(0-2):");
    scanf("%d", &se);
    switch (se)
    {
    case 1:
        login();//登录
        break;
    case 2:
        registeruser();//注册
        break;
    case 0:
        printf("\t\t【退出系统】\n");
        exit(0);
        system("pause");
        break;
    default:
        printf("输入错误!请重新输入:\n");
        break;
    }
}

// 注册账号功能
void registeruser()
{
    char ac[30];
    char pw[6],pd[6];
    int	i, a = 0;
    printf("\t\t【注册帐号】\n");
    FILE *fp = fopen("账号信息档案.txt", "ab");
    printf("请输入用户账号和密码(账号、密码可以为数字,中文字母,英文字母,符号,密码必须6位)\n\n");
    printf("请输入账号:");
    scanf("%s", ac);
    strcpy(tea[a].ac, ac);
    printf("请输入密码:");
    for (i = 0; i<6; i++)
    {
        pw[i] = _getch();
        printf("*");
        tea[a].pw[i] = pw[i];
        if (pw[i] == '\r')
        {
            printf("注册失败,请重新注册账号\n");
            return;
        }
    }
    printf("\n再次确认密码:");
    for (i = 0; i<6; i++)
    {
        pd[i] = _getch();
        printf("*");
        if (tea[a].pw[i] != pd[i])
        {
            printf("\n密码不对,请重新注册账号");
            return;
        }
    }
    fprintf(fp, "账号\t密码\n");
    fprintf(fp, "%s\t%s\n", tea[a].ac, tea[a].pw);
    printf("\n注册成功!!!\n");
    fclose(fp);
    system("pause");
    system("cls");
}

//登录账号功能
void login()
{
    char ac[30];
    char ad[20], pw;
    int	i, j, a = 0;
    int	flag = 0;

    printf("\t\t【登录账号】\n");
    for (i = 0; i<3; i++)
    {
        printf("请输入帐号:");
        scanf("%s", ac);
        printf("请输入密码:");
        for (j = 0; j<6; j++)
        {
            pw = _getch();
            printf("*");
            ad[j] = pw;
        }
        FILE *fp;
        fp = fopen("账号信息档案.txt", "r");//读取文件操作
        while (!feof(fp))
        {
            fscanf(fp, "%s %sn", tea[a].ac, tea[a].pw);
            if ((strcmp(ac, tea[a].ac) == 0) && (strcmp(ad, tea[a].pw) == 0))
            {
                flag = 1;
                fclose(fp);
                break;
            }
            a++;
        }

        if (flag == 1)
        {
            printf("\n登录成功!\n");
            system("pause");
            system("cls");
            while (1)
            {
                Menu();
                Key();
                system("pause");
                system("cls");
            }
        }
        else
        {
            printf("\n账号或者密码输入错误,你还有%d次机会,请重新输入:\n", 2 - i);
        }
    }
    if (i == 3)
    {
        printf("登录失败!\n");
        return;
    }

}

int main()
{
    //system("color 5");
    list=createList();
    readInfoFromFile("student.txt",list);
    while(1)
    {
        Hello();
        system("pause");
        system("cls");
    }
    return 0;
}

  • 20
    点赞
  • 190
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
#include <stdio.h> #include <stdlib.h> #include <string.h> #include<ctype.h> #define M 3 struct student {long num; char name[20]; char sex; int score[5]; int ave; }stu[M]; void init() { printf("\t\t********************************\n\n"); printf("\t\tStudent score management systerm \n"); printf("\n"); printf("\t\t Make by Maggiehe \n"); printf("\n"); printf("\t\t Student number is 3206***** \n\n"); printf("\t\t********************************\n\n"); } void input() { int i,j; printf("\nInput the student number name sex math English PE maolun majing:\n"); for(i=0;i<M;i++) {scanf("%ld,%s,%c",&stu[i].num,stu[i].name,&stu[i].sex); for(j=0;j<5;j++) scanf("%d",&stu[i].score[j]); scanf("%d",&stu[i].ave); save(); } } void list() { int i,j; clrscr(); printf("\t**********************student****************************\n"); printf("num name sex math English PE maolun majing:\n"); for(i=0;i<M;i++) { printf("%ld %s %c",stu[i].num,stu[i].name,stu[i].sex); for(j=0;j<5;j++) printf("%d",stu[i].score[j]); printf("%d",stu[i].ave); } if((i+1)%10==0) { printf("\npress any key continue.......\n"); getch(); } printf("\t*************************end*********************************\n"); } void average() { int i,j; float sum[M]; for(i=0;i<M;i++) for(j=0;j<5;j++) sum[i]+=stu[i].score[j]; stu[i].ave=sum[i]/5.0; } void search_num() { long num; int i,j; printf("\nplease enter number which you want to search:"); scanf("%ld",&num); printf("\n"); for(i=0;i<M;i++) if(stu[i].num!=num) printf("The number is not exist\n"); else { printf("number name sex math English PE maolun majing average\n"); printf("%ld %s %c",stu[i].num,stu[i].name,stu[i].sex); for(j=0;j<5;j++) printf("%d",stu[i].score[j]); printf("%d",stu[i].ave); } } void search_nam() { int i,j; char name[20]; printf("\nplease enter name which you want to search:"); scanf("%s",&name); printf("\n"); for(i=0;i<M;i++) if(strcmp(stu[i].name,name)==0) { printf("number name sex math English PE maolun majing average:\n"); printf("%ld%s%c",stu[i].num,stu[i].name,stu[i].sex); for(j=0;j<5;j++) printf("%d",stu[i].score[j]); printf("%d",stu[i].ave); } else printf("\nThe name is not exist!!!\n"); } void search_ave() { int i,j,a=0; float k; printf("please enter average score which you want to search:"); scanf("%f",&k); printf("\n"); for(i=0;i<M;i++) if(stu[i].ave!=k) printf("The average score is not exist!!!\n"); else for(i=0;i<M;i++) { if(stu[i].ave<=k) printf("number name sex math English PE maolun majing average\n"); printf("%ld %s %c",stu[i].num,stu[i].name,stu[i].sex); for(j=0;j<5;j++) printf("%d",stu[i].score[j]); printf("%d",stu[i].ave); a++; } } void sort() { int i,j; struct student temp; for(i=0;i<M;i++) for(j=i+i;j<M;j++) if(stu[i].ave<stu[j].ave) {temp=stu[i]; stu[i]=stu[j]; stu[j]=temp; } } void save() { int i; FILE *fp; if((fp=fopen("student.dat","wb"))==NULL) {printf("cannot open file\n"); return; } for(i=0;i<M;i++) if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1) printf("file write error\n"); fclose(fp); } void delect() { int i,t; long num; printf("please enter number which you want to delect:"); scanf("%ld",&num); printf("\n"); for(i=0;i<M;i++) { if(stu[i].num!=num) printf("The number is not exist!!!\n"); if(stu[i].num==num) t=i; } for(i=t;i<M;i++) stu[i]=stu[i+1]; save(); } void insert() {FILE *fp; int i,n,t; struct student s; printf("please input record\n"); printf("number name sex math English PE maolun majing average\n"); scanf("%ld,%s,%c,%d%d%d%d%d%d",&s.num,s.name,&s.sex,&s.score[0],&s.score[1],&s.score[2],&s.score[3],&s.score[4],&s.ave); s.ave=(s.score[0]+s.score[1]+s.score[2]+s.score[3]+s.score[4])/3.0; if((fp=fopen("student.dat","wb"))==NULL) {printf("cannot open file\n"); return; } i=M; for(t=0;stu[i].ave>s.ave&&t<M;t++) if(fwrite(&s,sizeof(struct student),1,fp)!=1) printf("file write error\n"); fclose(fp); } void MainMenu() {clrscr(); printf("\t********************************************************************\n \n); Printf(“\n”); printf("\t choose one of following:\n"); printf("\t 1. search record\n"); printf("\t 2. sort record\n"); printf("\t 3. insert record\n"); printf("\t 4. delect record\n"); printf("\t please enter your choice:"); printf(“\n”); printf("\t********************************************************************\n"); } void menu_select() {clrscr(); printf("\t******************************************************************\n\n"); printf(“\n”); printf("\t choose one of following:\n"); printf("\t 1.1 search by number\n"); printf("\t 1.2 search by name\n"); printf("\t 1.3 search by average score\n"); printf("\t please enter your choice:"); printf(“\n”); printf("\t******************************************************************\n"); } void search() { char ch; clrscr(); menu_select(); ch=getch(); switch(ch) { case '1':search_num();break; case '2':search_nam();break; case '3':search_ave();break; } } main() { char ch; clrscr(); init(); input(); list(); average(); save(); MainMenu(); ch=getch(); switch(ch) { case '1':search();break; case '2':sort();break; case '3':insert();break; case '4':delect();break; } search_num(); search_nam(); search_ave(); sort(); delect(); insert; }
图书管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。<br>因此本人结合开入式图书馆的要求,对MS SQL Server2000数据库管理系统、SQL语言原理、Delphi应用程序设计,Delphi数据库技术进行了较深入的学习和应用,主要完成对图书管理系统的需求分析、功能模块划分、数据库模式分析,并由此设计了数据库结构和应用程序。系统运行结果证明,本文所设计的图书管理系统可以满足借阅者、图书馆工作人员和高级管理员三方面的需要。<br>第一章对数据库应用系统开发和图书管理系统进行了简明的介绍,并分析了开发图书管理系统所应进行的工作。<br>第二章对数据库的设计和SQL语言的使用进行了系统分析,为深入理解数据库应用打下了基础。<br>第三章学习了具体的开发工具Delphi 6.0,对其数据库组件,SQL语言在Delphi中的应用等数据库编程关键技术进行了系统的介绍。<br>第四章分析了图书管理信息系统的应用需求,按照数据库设计理论一步一步地给出了系统需求说明书、局部ER图、全局ER图、系统关系模式,子模式,利用MS SQL Server2000建立了数据库<br>第五章进行了具体的程序设计,具体划分了三类用户的操作权限,设计了了三个操作界面。实现了数据库表的浏览,记录的添加、删除和修改,报表的生成,实现了多数据库表的连接操作,实现了多条件查询和模糊查询,并灵活实现了对不可更新查询结果集的更新操作,实现了主从表操作,实现了密码维护功能,最后,系统还可以导入数据库以对任意同结构的数据库进行操作。<br>设计充分利用Delphi 6、MS SQL Server2000数据库技术的强大力量,提高了编程效率和可靠性。<br>关键词:数据库,SQL语言,MS SQL Server,Delphi6,<br>数据库组件,图书管理,窗体,listview组件 <br>
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值