吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 18092|回复: 43
收起左侧

[C&C++ 原创] 【C语言程序】学生成绩管理系统

[复制链接]
bfgjjt 发表于 2018-7-10 11:41
本帖最后由 bfgjjt 于 2018-7-10 16:24 编辑

有许多朋友要求出一个比较难的程序,今天给大家分享一个C语言环境下开发的学生成绩管理系统
这个系统原理很简单:成绩的录入,输出,修改,排序,删除等等。
主要目的是帮大家温习C语言的使用。
【软件获取】请查看附件
【源代码】

--------------------------------------------------------------------------------------------------------------------
[C] 纯文本查看 复制代码
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<dos.h>
#include<string.h>
#define LEN sizeof(struct student)
#define FORMAT "%-8d%-15s%-12.1lf%-12.1lf%-12.1lf%-12.1lf\n"
#define DATA stu.num,stu.name,stu.elec,stu.expe,stu.requ,stu.sum
//仅供学习使用,起切勿用作商业用途! 
float Felec,Fexpe,Frequ;
struct student/*定义学生成绩结构体*/
{ 
        int num;/*学号*/
        char name[15];/*姓名*/
        double elec;/*选修课*/
        double expe;/*实验课*/
        double requ;/*必修课*/
        double sum;/*总分*/
};
struct student stu[50];/*定义结构体数组*/
void in();/*录入学生成绩信息*/
void show();/*显示学生信息*/
void order();/*按总分排序*/
void del();/*删除学生成绩信息*/
void modify();/*修改学生成绩信息*/
void menu();/*主菜单*/
void insert();/*插入学生信息*/
void total();/*计算总人数*/
void search();/*查找学生信息*/
int main()/*主函数*/
{ 
        int n;
        menu();
        scanf("%d",&n);/*输入选择功能的编号*/
        while(n)
        { 
                switch(n)
                {
                case 1: 
                        in();
                        break;
                case 2: 
                        search();
                        break;
                case 3: 
                        del();
                        break;
                case 4:
                        modify();
                        break;
                case 5:
                        insert();
                        break;
                case 6:
                        order();
                        break;
                case 7:
                        total();
                        break;
                default:break;
                }
                getch();
                menu();/*执行完功能再次显示菜单界面*/
                scanf("%d",&n);
        }
}


void in()/*录入学生信息*/
{ 
        int i,m=0;/*m是记录的条数*/
        char ch[2];
        FILE *fp;/*定义文件指针*/
        if((fp=fopen("data","ab+"))==NULL)/*打开指定文件*/
        { 
                printf("can not open\n");
                return;
        }
        while(!feof(fp)) 
        { 
                if(fread(&stu[m] ,LEN,1,fp)==1)
                        m++;/*统计当前记录条数*/
        }
        fclose(fp);
        if(m==0) 
                printf("No record!\n");
        else 
        {
                system("cls");
                show();/*调用show函数,显示原有信息*/
        }
        if((fp=fopen("data","wb"))==NULL)
        { 
                printf("can not open\n");
                return;
        }
        for(i=0;i<m;i++) 
                fwrite(&stu ,LEN,1,fp);/*向指定的磁盘文件写入信息*/
        printf("please input(y/n):");
        scanf("%s",ch);
        if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
        {
                printf("please input per centum:");
                printf("\nelective:");
                scanf("%f",&Felec);
                printf("\nexperiment:");
                scanf("%f",&Fexpe);
                printf("\nrequired course:");
                scanf("%f",&Frequ);
        }
        while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要录入新信息*/
        {
                printf("number:");
                scanf("%d",&stu[m].num);/*输入学生学号*/
                for(i=0;i<m;i++)
                        if(stu.num==stu[m].num)
                        {
                                printf("the number is existing,press any to continue!");
                                getch();
                                fclose(fp);
                                return;
                        }
                        printf("name:");
                        scanf("%s",stu[m].name);/*输入学生姓名*/
                        printf("elective:");
                        scanf("%lf",&stu[m].elec);/*输入选修课成绩*/
                        printf("experiment:");
                        scanf("%lf",&stu[m].expe);/*输入实验课成绩*/
                        printf("required course:");
                        scanf("%lf",&stu[m].requ);/*输入必修课成绩*/
                        stu[m].sum=stu[m].elec*Felec+stu[m].expe*Fexpe+stu[m].requ*Frequ;/*计算出总成绩*/
                        if(fwrite(&stu[m],LEN,1,fp)!=1)/*将新录入的信息写入指定的磁盘文件*/
                        {
                                printf("can not save!"); 
                                getch(); 
                        }
                        else
                        { 
                                printf("%s saved!\n",stu[m].name);
                                m++;
                        }
                        printf("continue?(y/n):");/*询问是否继续*/
                        scanf("%s",ch);
        }
        fclose(fp);
        printf("OK!\n");
}


void show()
{
        FILE *fp;
        int i,m=0;
        fp=fopen("data","ab+");
        while(!feof(fp))
        {
                if(fread(&stu[m] ,LEN,1,fp)==1) 
                        m++;
        }  
        fclose(fp);
        printf("number  name           elective    experiment  required    sum\t\n");
        for(i=0;i<m;i++)
        { 
                printf(FORMAT,DATA);/*将信息按指定格式打印*/
        }
}


void menu()/*自定义函数实现菜单功能*/
{
        system("cls");
        printf("\n\n\n\n\n");
        printf("\t\t|---------------------STUDENT-------------------|\n");
        printf("\t\t|\t 0. exit                                |\n");
        printf("\t\t|\t 1. input record                        |\n");
        printf("\t\t|\t 2. search record                       |\n");
        printf("\t\t|\t 3. delete record                       |\n");
        printf("\t\t|\t 4. modify record                       |\n");
        printf("\t\t|\t 5. insert record                       |\n");
        printf("\t\t|\t 6. order                               |\n");
        printf("\t\t|\t 7. number                              |\n");
        printf("\t\t|--------该程序由吾爱破解bfgjjt提供-------------|\n\n");
        printf("\t\t\tchoose(0-7):");
}


void order()/*自定义排序函数*/
{ 
        FILE *fp;
        struct student t;
        int i=0,j=0,m=0;
        if((fp=fopen("data","ab+"))==NULL)
        { 
                printf("can not open!\n");
                return;
        }
        while(!feof(fp)) 
                if(fread(&stu[m] ,LEN,1,fp)==1) 
                        m++;
                fclose(fp);
                if(m==0) 
                {
                        printf("no record!\n");
                        return;
                }
                for(i=0;i<m-1;i++)
                        for(j=i+1;j<m;j++)/*双重循环实现成绩比较并交换*/
                                if(stu.sum<stu[j].sum)
                                { 
                                        t=stu;
                                        stu=stu[j];
                                        stu[j]=t;
                                }
                                if((fp=fopen("data","wb"))==NULL)
                                { 
                                        printf("can not open\n");
                                        return;
                                }
                                for(i=0;i<m;i++)/*将重新排好序的内容重新写入指定的磁盘文件中*/
                                        if(fwrite(&stu ,LEN,1,fp)!=1)
                                        { 
                                                printf("%s can not save!\n"); 
                                                getch();
                                        }
                                        fclose(fp);
                                        printf("save successfully\n");
}
void del()/*自定义删除函数*/
{
        FILE *fp;
        int snum,i,j,m=0;
        char ch[2];
        if((fp=fopen("data","ab+"))==NULL)
        { 
                printf("can not open\n");
                return;
        }
        while(!feof(fp))  
                if(fread(&stu[m],LEN,1,fp)==1) 
                        m++;
                fclose(fp);
                if(m==0) 
                {
                        printf("no record!\n");
                        return;
                }
                printf("please input the number:");
                scanf("%d",&snum);
                for(i=0;i<m;i++)
                        if(snum==stu.num)
                                break;
                 if(i==m)
                        {
                        printf("can not find");
                        getchar();
                        return;
                        }
                        printf("find the student,delete?(y/n)");
                        scanf("%s",ch);
                        if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要进行删除*/
                        {
                                for(j=i;j<m;j++)
                                        stu[j]=stu[j+1];/*将后一个记录移到前一个记录的位置*/
                                        m--;/*记录的总个数减1*/
                                        printf("delete successfully!\n");
                                }
                                if((fp=fopen("data","wb"))==NULL)
                                { 
                                        printf("can not open\n");
                                        return;
                                }
                                for(j=0;j<m;j++)/*将更改后的记录重新写入指定的磁盘文件中*/
                                        if(fwrite(&stu[j] ,LEN,1,fp)!=1)
                                        { 
                                                printf("can not save!\n");
                                                getch();
                                        }
                                        fclose(fp);
                                
}


void search()/*自定义查找函数*/
{ 
        FILE *fp;
        int snum,i,m=0;
        char ch[2];
        if((fp=fopen("data","ab+"))==NULL)
        { 
                printf("can not open\n");
                return;
        }
        while(!feof(fp)) 
                if(fread(&stu[m],LEN,1,fp)==1) 
                        m++;
                fclose(fp);
                if(m==0)
                {
                        printf("no record!\n");
                        return;
                }
                printf("please input the number:");
                scanf("%d",&snum);
                for(i=0;i<m;i++)
                        if(snum==stu.num)/*查找输入的学号是否在记录中*/
                        { 
                                printf("find the student,show?(y/n)");
                                scanf("%s",ch);
                                if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0) 
                                {
                                        printf("number  name           elective    experiment  required    sum\t\n");
                                        printf(FORMAT,DATA);/*将查找出的结果按指定格式输出*/
                                        break;
                                }
                                else
                                        return;
                        }   
                        if(i==m) 
                                printf("can not find the student!\n");/*未找到要查找的信息*/
}


void modify()/*自定义修改函数*/
{ 
        FILE *fp;
        int i,j,m=0,snum;
        if((fp=fopen("data","ab+"))==NULL)
        { 
                printf("can not open\n");
                return;
        }
        while(!feof(fp))  
                if(fread(&stu[m],LEN,1,fp)==1) 
                        m++;
                if(m==0)
                {
                        printf("no record!\n");
                        fclose(fp);
                        return;
                }
                printf("please input the number of the student which do you want to modify!\n");
                scanf("%d",&snum);
                for(i=0;i<m;i++)
                        if(snum==stu.num)/*检索记录中是否有要修改的信息*/
                                break;
                        if(i<m)
                        {        
                                printf("find the student!you can modify!\n");
                                printf("please input per centum:");
                                printf("\nelective:");
                                scanf("%f",&Felec);
                                printf("\nexperiment:");
                                scanf("%f",&Fexpe);
                                printf("\nrequired course:");
                                scanf("%f",&Frequ);
                                printf("name:\n");
                                scanf("%s",stu.name);/*输入名字*/
                                printf("\nelective:");
                                scanf("%lf",&stu.elec);/*输入选修课成绩*/
                                printf("\nexperiment:");
                                scanf("%lf",&stu.expe);/*输入实验课成绩*/
                                printf("\nrequired course:");
                                scanf("%lf",&stu.requ);/*输入必修课成绩*/
                                stu.sum=stu.elec*Felec+stu.expe*Fexpe+stu.requ*Frequ;
                        }
                        else 
                        {
                                printf("can not find!");
                                getchar();
                                return;
                        }
                        if((fp=fopen("data","wb"))==NULL)
                        {
                                printf("can not open\n");
                                return;
                        }
                        for(j=0;j<m;j++)/*将新修改的信息写入指定的磁盘文件中*/
                                if(fwrite(&stu[j] ,LEN,1,fp)!=1)
                                { 
                                        printf("can not save!"); 
                                        getch(); 
                                }
                                fclose(fp);
}


void insert()/*自定义插入函数*/
{ 
        FILE *fp;
        int i,j,k,m=0,snum;
        if((fp=fopen("data","ab+"))==NULL)
        { 
                printf("can not open\n");
                return;
        }
        while(!feof(fp))  
                if(fread(&stu[m],LEN,1,fp)==1)
                        m++;
                if(m==0) 
                {
                        printf("no record!\n");
                        fclose(fp);
                        return;
                }
                printf("please input position where do you want to insert!(input the number)\n");
                scanf("%d",&snum);/*输入要插入的位置*/
                for(i=0;i<m;i++)
                        if(snum==stu.num)
                                break;
                        for(j=m-1;j>i;j--)
                                stu[j+1]=stu[j];/*从最后一条记录开始均向后移一位*/
                        printf("now please input the new information.\n");
                        printf("number:");
                        scanf("%d",&stu[i+1].num);
                        for(k=0;k<m;k++)
                                if(stu[k].num==stu[i+1].num&&k!=i+1)
                                {
                                        printf("the number is existing,press any to continue!");
                                        getch();
                                        fclose(fp);
                                        return;
                                }
                                printf("please input per centum:");
                                printf("\nelective:");
                                scanf("%f",&Felec);
                                printf("\nexperiment:");
                                scanf("%f",&Fexpe);
                                printf("\nrequired course:");
                                scanf("%f",&Frequ);
                                printf("name:\n");
                                scanf("%s",stu[i+1].name);
                                printf("\nelective:");
                                scanf("%lf",&stu[i+1].elec);
                                printf("\nexperiment:");
                                scanf("%lf",&stu[i+1].expe);
                                printf("\nrequired course:");
                                scanf("%lf",&stu[i+1].requ);
                                stu[i+1].sum=stu[i+1].elec*Felec+stu[i+1].expe*Fexpe+stu[i+1].requ*Frequ;
                                if((fp=fopen("data","wb"))==NULL)
                                { 
                                        printf("can not open\n");
                                        return;
                                }
                                for(k=0;k<=m;k++)
                                        if(fwrite(&stu[k] ,LEN,1,fp)!=1)/*将修改后的记录写入磁盘文件中*/
                                        {
                                                printf("can not save!"); 
                                                getch(); 
                                        }
                                        fclose(fp);
}


void total()
{ 
        FILE *fp;
        int m=0;
        if((fp=fopen("data","ab+"))==NULL)
        {         
                printf("can not open\n");
                return;
        }
        while(!feof(fp))  
                if(fread(&stu[m],LEN,1,fp)==1) 
                        m++;/*统计记录个数即学生个数*/
                if(m==0)
                {
                        printf("no record!\n");
                        fclose(fp);
                        return;
                }
                printf("the class are %d students!\n",m);/*将统计的个数输出*/
                fclose(fp);
}


主界面

主界面
成绩录入.jpg
排序.png
查询.png

student.zip

44.53 KB, 下载次数: 388, 下载积分: 吾爱币 -1 CB

程序

免费评分

参与人数 7吾爱币 +4 热心值 +7 收起 理由
风之神 + 1 + 1 用心讨论,共获提升!
Snihc1205 + 1 我很赞同!
路漫漫w + 1 + 1 热心回复!
Avgi + 1 + 1 热心回复!
yx0731 + 1 + 1 我很赞同!
Edgar123 + 1 谢谢@Thanks!
西瓜小刚 + 1 我很赞同!

查看全部评分

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

heang567 发表于 2018-10-20 18:26 来自手机
这个是课程设计的题目吧!
明月相照 发表于 2018-7-10 13:12
本帖最后由 明月相照 于 2018-7-10 13:15 编辑

记得当时也用C做过类似的,参考FOX的数据库的功能和菜单做个简单的,当时排除错误就记得是用时很久。叹......
对分检索算法和排序什么的,搞了好些天。
mengsiyiren 发表于 2018-7-10 11:58
SPDPK_蛛侍 发表于 2018-7-10 12:02 来自手机
好厉害。。
苏苏啊 发表于 2018-7-10 12:10
不错 课程设计可以复用下
西瓜小刚 发表于 2018-7-10 12:14
谢谢 分享 值得学习
MYLQG2ZHX 发表于 2018-7-10 12:14
谢谢分享
Edgar123 发表于 2018-7-10 12:17
观摩学习.
csa 发表于 2018-7-10 12:44
下载学习下,谢谢
A羽飞 发表于 2018-7-10 12:50
666,我只会VBA
lanzhimimi 发表于 2018-7-10 13:03
太牛了。谢谢楼主分享代码  正想在复习一下C语言呢。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

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

GMT+8, 2024-4-26 01:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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