精华内容
下载资源
问答
  • 主要为大家详细介绍了C语言结课设计之计算器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • C语言结课设计:餐饮管理与点餐系统

    万次阅读 多人点赞 2020-04-28 21:36:04
    一、项目简介 1、本程序实现了用户的点餐功能,共包含五类菜品:凉菜、热菜、锅仔、主食、饮品。...5、使用了C语言很多基础语法:函数、指针、结构体、文件等。 二、程序说明 想运行本程序,需要在.C同...

    一、项目简介

    1、本程序实现了用户的点餐功能,共包含五类菜品:凉菜、热菜、锅仔、主食、饮品。还有查看所点菜品与结束等功能。
    2、后台管理员:按a可进入,主页面并未提示。
    3、合理运用getch函数,清屏与暂停函数,页面整洁清爽。
    4、菜品与txt文件对应,可实现对程序与txt的同步增删改查等功能。
    5、使用了C语言很多基础语法:函数、指针、结构体、文件等。

    二、程序说明

    程序运行后在主页面按a进入后台管理页面,给相应的菜品信息添加菜品,这些信息会自动保存到txt中,下次打开的时候也会自动读取,做好菜品信息的创建工作就可以回到主页面进行相应的用户点餐操作。

    三、功能演示

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    四、思维导图

    在这里插入图片描述

    五、程序代码

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<conio.h>
    
    /*宏定义区*/
    #define max_str 30 //最大字符串长度
    #define max_num 30 //最大菜品数量
    #define max_all 100 //今日售卖总计最大值
    
    /*定义菜品结构体*/
    struct dishes
    {
        char name[max_str];
        int price;
    };
    
    /*定义全局变量*/
    struct dishes list1[max_num]; //存放凉菜菜品信息
    int num1=0; //存放凉菜菜品数量
    int *p1=&num1;
    struct dishes list2[max_num]; //存放热菜菜品信息
    int num2=0; //存放热菜菜品数量
    int *p2=&num2;
    struct dishes list3[max_num]; //存放锅仔菜品信息
    int num3=0; //存放锅仔菜品数量
    int *p3=&num3;
    struct dishes list4[max_num]; //存放主食菜品信息
    int num4=0; //存放主食菜品数量
    int *p4=&num4;
    struct dishes list5[max_num]; //存放饮品菜品信息
    int num5=0; //存放饮品菜品数量
    int *p5=&num5;
    struct dishes list6[max_num]; //存放顾客点餐菜品信息
    int num6=0; //存放顾客点餐菜品数量
    int *p6=&num6;
    struct dishes list7[max_all]; //存放今日所点总菜品信息
    int num7=0; //存放今日所点总菜品数量
    int *p7=&num7;
    
    /*全局声明*/
    /*菜单的输出*/
    //一级主菜单
    char menu_m1();
    // 管理员一级菜单
    char menu_a1();
    // 管理员二级菜单:添加或删除菜品的提示
    char menu_a2();
    //输出菜单1(包括提示输入语句)
    void output_1(struct dishes list[],int num);
    //输出菜品信息2(不含有提示输入语句)
    void output_2(struct dishes list[],int num);
    
    /*函数*/
    //创建程序运行所需的txt文件
    void creat_file();
    //加载菜品信息到结构体数组,嵌套功能模块1:读取txt写入到单个结构体数组中
    void load_dishes(struct dishes list1[],int *p1,struct dishes list2[],int *p2,struct dishes list3[],int *p3,struct dishes list4[],int *p4,struct dishes list5[],int *p5);
    //实现点餐的函数,嵌套功能模块2:实现点餐的结构体数组写入数据
    void ordering(struct dishes list1[],int num1,struct dishes list2[],int *p2,struct dishes list3[],int *p3);
    // 查看与结算的输出函数
    void settlement(struct dishes list[],int num);
    // 计算今日收入
    void income(struct dishes list[],int num);
    // 实现菜品的价格修改,内嵌功能模块3:实现结构体菜品的价格修改与文件的重构
    void change(struct dishes list[],int *p,char ch);
    // 实现菜品的删除,内嵌功能模块4:实现结构体菜品的删除与文件的重构
    void del(struct dishes list[],int *p,char ch);
    // 函数:实现菜品的添加,内嵌功能模块5:实现结构体菜品的添加与文件的重构
    void add(struct dishes list[],int *p,char ch);
    
    /*功能模块区*/
    //功能模块1:读取txt写入到单个结构体数组中
    int function_read(struct dishes list[],FILE *fp);
    //功能模块2:实现点餐的结构体数组写入数据
    void function_ordering(struct dishes list1[],int num1,struct dishes list2[],int *p2,struct dishes list3[],int *p3,int choice);
    // 功能模块3:实现结构体菜品的价格修改与文件的重构,内嵌功能模块6:对经过修改的菜品结构体按价格从低到高排序
    int funtion_change(struct dishes list[],int num,FILE *fp);
    //功能模块4:实现结构体菜品的删除与文件的重构
    int function_del(struct dishes list[],int *p,FILE *fp);
    //功能模块5:实现结构体菜品的添加与文件的重构,,内嵌功能模块6:对经过修改的菜品结构体按价格从低到高排序
    int function_add(struct dishes list[],int *p,FILE *fp);
    // 功能模块6:对经过修改的菜品结构体按价格从低到高排序
    void function_sort(struct dishes list[],int num);
    
    int main()
    {
        creat_file();
        load_dishes(list1,p1,list2,p2,list3,p3,list4,p4,list5,p5);
        int i,j,choice;
        char a,b,c;
        while(1)
        {
            a=menu_m1();
            switch(a)
            {
            case '1':
                ordering(list1,num1,list6,p6,list7,p7);
                break;
            case '2':
                ordering(list2,num2,list6,p6,list7,p7);
                break;
            case '3':
                ordering(list3,num3,list6,p6,list7,p7);
                break;
            case '4':
                ordering(list4,num4,list6,p6,list7,p7);
                break;
            case '5':
                ordering(list5,num5,list6,p6,list7,p7);
                break;
            case '6':
                system("cls"),settlement(list6,num6),system("pause"),system("cls");
                break;
            case 'y':
                system("cls"),settlement(list6,num6),*p6=0,system("pause");
                break;
            case 'a':
                system("cls");
                while(1)
                {
                    b=menu_a1();
                    switch(b)
                    {
                    case '1':
                        system("cls"),income(list7,num7),system("pause"),system("cls");
                        break;
                    case '2':
                    {
                        system("cls");
                        c=menu_a2();
                        system("cls");
                        switch(c)
                        {
                        case '1':
                            change(list1,p1,c);
                            break;
                        case '2':
                            change(list2,p2,c);
                            break;
                        case '3':
                            change(list3,p3,c);
                            break;
                        case '4':
                            change(list4,p4,c);
                            break;
                        case '5':
                            change(list5,p5,c);
                            break;
                        }
                        system("cls");
                    }
                    break;
                    case '3':
                    {
                        system("cls");
                        c=menu_a2();
                        system("cls");
                        switch(c)
                        {
                        case '1':
                            del(list1,p1,c);
                            break;
                        case '2':
                            del(list2,p2,c);
                            break;
                        case '3':
                            del(list3,p3,c);
                            break;
                        case '4':
                            del(list4,p4,c);
                            break;
                        case '5':
                            del(list5,p5,c);
                            break;
                        }
                        system("cls");
                    }
                    break;
                    case '4':
                    {
                        system("cls");
                        c=menu_a2();
                        system("cls");
                        switch(c)
                        {
                        case '1':
                            add(list1,p1,c);
                            break;
                        case '2':
                            add(list2,p2,c);
                            break;
                        case '3':
                            add(list3,p3,c);
                            break;
                        case '4':
                            add(list4,p4,c);
                            break;
                        case '5':
                            add(list5,p5,c);
                            break;
                        }
                        system("cls");
                    }
                    break;
                    case '0':
                        system("cls");
                        break;
                    }
                    if(b=='0')
                        break;
                }
                break;
    
            }
            system("cls");
        }
    }
    
    /*菜单的输出*/
    //一级主菜单
    char menu_m1()
    {
        char ch;
        printf("             ---------------------------\n");
        printf("            |     欢迎光临本餐厅        |\n");
        printf("            |    请按序号选择菜品       |\n");
        printf("             ---------------------------\n");
        printf("            |      1         凉菜       |\n");
        printf("            |      2         热菜       |\n");
        printf("            |      3         锅仔       |\n");
        printf("            |      4         主食       |\n");
        printf("            |      5         饮品       |\n");
        printf("            |      6         查看       |\n");
        printf("            |      y         结算       |\n");
        printf("             ---------------------------\n");
        printf("            输入序号:");
        ch=getch();
        return ch;
    }
    
    // 管理员一级菜单
    char menu_a1()
    {
        char ch;
        printf("\n-------------------------------\n");
        printf("\t1\t今日收入\t\n");
        printf("\t2\t修改价格\t\n");
        printf("\t3\t删除菜品\t\n");
        printf("\t4\t添加菜品\t\n");
        printf("\t0\t返回上一级\t\n");
        printf("-------------------------------\n");
        printf("输入序号:");
        ch=getch();
        return ch;
    }
    
    // 管理员二级菜单:添加或删除菜品的提示
    char menu_a2()
    {
        char ch;
        printf("\n-------------------------------\n");
        printf("\t1\t凉菜\t\n");
        printf("\t2\t热菜\t\n");
        printf("\t3\t锅仔\t\n");
        printf("\t4\t主食\t\n");
        printf("\t5\t饮品\t\n");
        printf("\t0\t返回上一级\t\n");
        printf("-------------------------------\n");
        printf("输入序号:");
        ch=getch();
        return ch;
    }
    
    //输出菜单1(包括提示输入语句)
    void output_1(struct dishes list[],int num)
    {
        int i;
        printf("\n-------------------------------------------------\n");
        printf("|\t序号\t菜品\t\t价格\t\t|\n");
        printf("-------------------------------------------------\n");
        for(i=0; i<num; i++)
        {
            if(strlen(list[i].name)<=6)
                printf("|\t%d\t%s\t\t%d\t\t|\n",i+1,list[i].name,list[i].price);
            else
                printf("|\t%d\t%s\t%d\t\t|\n",i+1,list[i].name,list[i].price);
        }
        printf("|\t0\t返回\t\t\t\t|\n");
        printf("-------------------------------------------------\n");
        printf("请输入序号:\n");
    }
    
    //输出菜品信息2(不含有提示输入语句)
    void output_2(struct dishes list[],int num)
    {
        int i;
        printf("\n-------------------------------------------------\n");
        printf("|\t序号\t菜品\t\t价格\t\t|\n");
        printf("-------------------------------------------------\n");
        for(i=0; i<num; i++)
        {
            if(strlen(list[i].name)<=6)
                printf("|\t%d\t%s\t\t%d\t\t|\n",i+1,list[i].name,list[i].price);
            else
                printf("|\t%d\t%s\t%d\t\t|\n",i+1,list[i].name,list[i].price);
        }
        printf("|\t0\t返回\t\t\t\t|\n");
        printf("-------------------------------------------------\n");
    }
    
    /*函数*/
    //创建程序运行所需的txt文件
    void creat_file()
    {
        FILE *fp=fopen("凉菜.txt","a");
        if(fp==NULL)
            return;
        fclose(fp);
        fp=fopen("热菜.txt","a");
        if(fp==NULL)
            return;
        fclose(fp);
        fp=fopen("锅仔.txt","a");
        if(fp==NULL)
            return;
        fclose(fp);
        fp=fopen("主食.txt","a");
        if(fp==NULL)
            return;
        fclose(fp);
        fp=fopen("饮品.txt","a");
        if(fp==NULL)
            return;
        fclose(fp);
    }
    //加载菜品信息到结构体数组,嵌套功能模块1:读取txt写入到单个结构体数组中
    void load_dishes(struct dishes list1[],int *p1,struct dishes list2[],int *p2,struct dishes list3[],int *p3,struct dishes list4[],int *p4,struct dishes list5[],int *p5)
    {
        FILE *fp;
        fp=fopen("凉菜.txt","r");
        *p1=function_read(list1,fp);
        fp=fopen("热菜.txt","r");
        *p2=function_read(list2,fp);
        fp=fopen("锅仔.txt","r");
        *p3=function_read(list3,fp);
        fp=fopen("主食.txt","r");
        *p4=function_read(list4,fp);
        fp=fopen("饮品.txt","r");
        *p5=function_read(list5,fp);
        fclose(fp);
    }
    
    //实现点餐的函数,嵌套功能模块2:实现点餐的结构体数组写入数据
    void ordering(struct dishes list1[],int num1,struct dishes list2[],int *p2,struct dishes list3[],int *p3)
    {
        int choice;
        system("cls");
        output_1(list1,num1);
        while(1)
        {
            scanf("%d",&choice);
            if(choice>=0&&choice<=num1)
            {
                if(choice==0)
                    break;
                else
                    function_ordering(list1,num1,list2,p2,list3,p3,choice);
            }
            else
                printf("输入序号有误,请重新输入:\n");
        }
    }
    
    // 查看与结算的输出函数
    void settlement(struct dishes list[],int num)
    {
        int i,sum;
        for(i=0,sum=0; i<num; i++)
            sum+=list[i].price;
        printf("\n-------------------------------------------------\n");
        printf("|\t序号\t菜品\t\t价格\t\t|\n");
        printf("-------------------------------------------------\n");
        for(i=0; i<num; i++)
        {
            if(strlen(list[i].name)<=6)
                printf("|\t%d\t%s\t\t%d\t\t|\n",i+1,list[i].name,list[i].price);
            else
                printf("|\t%d\t%s\t%d\t\t|\n",i+1,list[i].name,list[i].price);
        }
        printf("-------------------------------------------------\n");
        printf("总价格为:%d\n\n",sum);
    }
    
    // 计算今日收入
    void income(struct dishes list[],int num)
    {
        int i,sum;
        output_2(list,num);
        for(i=0,sum=0; i<num; i++)
            sum+=list[i].price;
        printf("今日总收入:%d\n",sum);
    }
    
    // 实现菜品的价格修改,内嵌功能模块3:实现结构体菜品的价格修改与文件的重构
    void change(struct dishes list[],int *p,char ch)
    {
        int i=1;
        FILE *fp;
        while(i!=0)
        {
            switch(ch)
            {
            case '1':
                output_2(list1,num1),fp=fopen("凉菜.txt","w"),i=funtion_change(list1,num1,fp),fclose(fp);
                break;
            case '2':
                output_2(list2,num2),fp=fopen("热菜.txt","w"),i=funtion_change(list2,num2,fp),fclose(fp);
                break;
            case '3':
                output_2(list3,num3),fp=fopen("锅仔.txt","w"),i=funtion_change(list3,num3,fp),fclose(fp);
                break;
            case '4':
                output_2(list4,num4),fp=fopen("主食.txt","w"),i=funtion_change(list4,num4,fp),fclose(fp);
                break;
            case '5':
                output_2(list5,num5),fp=fopen("饮品.txt","w"),i=funtion_change(list5,num5,fp),fclose(fp);
                break;
            }
    
        }
    }
    
    // 实现菜品的删除,内嵌功能模块4:实现结构体菜品的删除与文件的重构
    void del(struct dishes list[],int *p,char ch)
    {
        int i=1;
        FILE *fp;
        while(i!=0)
        {
            switch(ch)
            {
            case '1':
                output_2(list1,num1),fp=fopen("凉菜.txt","w"),i=function_del(list1,p1,fp),fclose(fp);
                break;
            case '2':
                output_2(list2,num2),fp=fopen("热菜.txt","w"),i=function_del(list2,p2,fp),fclose(fp);
                break;
            case '3':
                output_2(list3,num3),fp=fopen("锅仔.txt","w"),i=function_del(list3,p3,fp),fclose(fp);
                break;
            case '4':
                output_2(list4,num4),fp=fopen("主食.txt","w"),i=function_del(list4,p4,fp),fclose(fp);
                break;
            case '5':
                output_2(list5,num5),fp=fopen("饮品.txt","w"),i=function_del(list5,p5,fp),fclose(fp);
                break;
            }
    
        }
    }
    
    // 函数:实现菜品的添加,内嵌功能模块5:实现结构体菜品的添加与文件的重构
    void add(struct dishes list[],int *p,char ch)
    {
        int i=1;
        FILE *fp;
        while(i!=0)
        {
            switch(ch)
            {
            case '1':
                output_2(list1,num1),fp=fopen("凉菜.txt","w"),i=function_add(list1,p1,fp),fclose(fp);
                break;
            case '2':
                output_2(list2,num2),fp=fopen("热菜.txt","w"),i=function_add(list2,p2,fp),fclose(fp);
                break;
            case '3':
                output_2(list3,num3),fp=fopen("锅仔.txt","w"),i=function_add(list3,p3,fp),fclose(fp);
                break;
            case '4':
                output_2(list4,num4),fp=fopen("主食.txt","w"),i=function_add(list4,p4,fp),fclose(fp);
                break;
            case '5':
                output_2(list5,num5),fp=fopen("饮品.txt","w"),i=function_add(list5,p5,fp),fclose(fp);
                break;
            }
    
        }
    }
    
    /*功能模块区*/
    //功能模块1:读取txt写入到单个结构体数组中
    int function_read(struct dishes list[],FILE *fp)
    {
        int num=1;//索引从0开始 定义为1统计个数
        char t,c[max_str];
        int i;
        if(fp==NULL)
        {
            printf("Can't open this file\n");
            exit(1);
        }
        while(!feof(fp)) //检测流上的文件结束符,如果文件s结束,则返回非0值,否则返回0
        {
            t=fgetc(fp);
            if(t=='\n')
                num++;
        }
        rewind(fp); //将指针重置到第一行
        for(i=0; i<num; i++)
        {
            fgets(c,max_str,fp);
            sscanf(c,"%s %d",list[i].name,&list[i].price);
        }
        fclose(fp);
        return num;
    }
    
    //功能模块2:实现点餐的结构体数组写入数据
    void function_ordering(struct dishes list1[],int num1,struct dishes list2[],int *p2,struct dishes list3[],int *p3,int choice)
    {
        strcpy(list2[*p2].name,list1[choice-1].name);
        list2[*p2].price=list1[choice-1].price;
        strcpy(list3[*p3].name,list1[choice-1].name);
        list3[*p3].price=list1[choice-1].price;
        *p2=*p2+1;
        *p3=*p3+1;
    }
    
    // 功能模块3:实现结构体菜品的价格修改与文件的重构,内嵌功能模块6:对经过修改的菜品结构体按价格从低到高排序
    int funtion_change(struct dishes list[],int num,FILE *fp)
    {
        if(fp==NULL)
        {
            printf("Can't open this file\n");
            exit(1);
        }
        int i,n;
        char temp[max_str],t[max_str];
        printf("\n输入ID:");
        scanf("%d",&n);
        if(n==0)
        {
            for(i=0; i<num; i++)
            {
                strcpy(temp,list[i].name);
                strcat(temp," ");
                itoa(list[i].price,t,10); //itoa():将整型值转换为字符串,参数依次为:要复制的内容,复制给谁,以什么进制。
                strcat(temp,t);
                strcat(temp,"\n");
                fputs(temp,fp);
            }
            return n;
        }
        printf("输入修改后的价格:");
        scanf("%d",&list[n-1].price);
        function_sort(list,num);
        for(i=0; i<num; i++)
        {
            strcpy(temp,list[i].name);
            strcat(temp," ");
            itoa(list[i].price,t,10); //itoa():将整型值转换为字符串,参数依次为:要复制的内容,复制给谁,以什么进制。
            strcat(temp,t);
            strcat(temp,"\n");
            fputs(temp,fp);
        }
        printf("修改完成\n");
        system("pause");
        system("cls");
        return 1;
    }
    
    //功能模块4:实现结构体菜品的删除与文件的重构
    int function_del(struct dishes list[],int *p,FILE *fp)
    {
        if(fp==NULL)
        {
            printf("Can't open this file\n");
            exit(1);
        }
        int i,n;
        char temp[max_str],t[max_str];
        printf("\n输入想要修改的菜品ID:");
        scanf("%d",&n);
        if(n==0)
        {
            for(i=0; i<*p; i++)
            {
                strcpy(temp,list[i].name);
                strcat(temp," ");
                itoa(list[i].price,t,10); //itoa():将整型值转换为字符串,参数依次为:要复制的内容,复制给谁,以什么进制。
                strcat(temp,t);
                strcat(temp,"\n");
                fputs(temp,fp);
            }
            return 0;
        }
        for(i=n-1; i<*p; i++)
        {
            strcpy(list[i].name,list[i+1].name);
            list[i].price=list[i+1].price;
        }
        *p=*p-1;
        for(i=0; i<*p; i++)
        {
            strcpy(temp,list[i].name);
            strcat(temp," ");
            itoa(list[i].price,t,10); //itoa():将整型值转换为字符串,参数依次为:要复制的内容,复制给谁,以什么进制。
            strcat(temp,t);
            strcat(temp,"\n");
            fputs(temp,fp);
        }
        printf("删除完成\n");
        system("pause");
        system("cls");
        return 1;
    }
    
    //功能模块5:实现结构体菜品的添加与文件的重构,内嵌功能模块6:对经过修改的菜品结构体按价格从低到高排序
    int function_add(struct dishes list[],int *p,FILE *fp)
    {
        if(fp==NULL)
        {
            printf("Can't open this file\n");
            exit(1);
        }
        int i,n,x;
        char temp[max_str],t[max_str],in[max_str];
        printf("\n输入0 0返回上一级\n");
        printf("输入菜品名和价格,中间使用空格隔开:\n");
        scanf("%s%d",list[*p].name,&list[*p].price);
        if(list[*p].price == 0)
        {
            for(i=0; i<*p; i++)
            {
                strcpy(temp,list[i].name);
                strcat(temp," ");
                itoa(list[i].price,t,10); //itoa():将整型值转换为字符串,参数依次为:要复制的内容,复制给谁,以什么进制。
                strcat(temp,t);
                strcat(temp,"\n");
                fputs(temp,fp);
            }
            return 0;
        }
        *p=*p+1;
        function_sort(list,*p);
        for(i=0; i<*p; i++)
        {
            strcpy(temp,list[i].name);
            strcat(temp," ");
            itoa(list[i].price,t,10); //itoa():将整型值转换为字符串,参数依次为:要复制的内容,复制给谁,以什么进制。
            strcat(temp,t);
            strcat(temp,"\n");
            fputs(temp,fp);
        }
        printf("添加完成\n");
        system("pause");
        system("cls");
        return 1;
    }
    
    // 功能模块6:对经过修改的菜品结构体按价格从低到高排序
    void function_sort(struct dishes list[],int num)
    {
        int i,j;
        struct dishes t;
        for(j=num-1; j>0; j--)
        {
            for(i=0; i<j; i++)
                if(list[i].price>list[i+1].price)
                {
                    t=list[i];
                    list[i]=list[i+1];
                    list[i+1]=t;
                }
        }
    }
    
    
    
    展开全文
  • 本文实例为大家分享了C语言实现计算器的具体代码,供大家参考,具体内容如下/*===============================================*\** 设计目的:简单计算器,计算形如10*(20.2-30.6)+5.0/2的表达式值** 简要原理:...

    本文实例为大家分享了C语言实现计算器的具体代码,供大家参考,具体内容如下

    9ac82ff9d43e23ef2ec4607bce9a521f.png

    /*===============================================*\

    ** 设计目的:简单计算器,计算形如10*(20.2-30.6)+5.0/2的表达式值

    ** 简要原理:中缀式转逆波兰式(后缀式)

    ** IDE:Dev-Cpp 4.9.9.2

    ** 注意事项:括号必须是英文状态的

    ** 时间: 2014-6-17

    \*===============================================*/

    #include

    #include

    #include

    #define maxn 1000

    char buf[maxn], str[maxn], signStack[maxn], ch[2];

    int len, id, idSign, idAns, i, n;

    double ans[maxn];

    void checkSign(char sign){

    if(sign == '(') signStack[idSign++] = sign;

    else if(sign == '*' || sign == '/'){

    while(idSign && (signStack[idSign-1] == '*' || signStack[idSign-1] == '/'))

    str[id++] = signStack[--idSign];

    signStack[idSign++] = sign;

    }else if(sign == ')'){

    while(signStack[idSign-1] != '(') str[id++] = signStack[--idSign];

    --idSign;

    }else{

    while(idSign && signStack[idSign-1] != '(') str[id++] = signStack[--idSign];

    signStack[idSign++] = sign;

    }

    str[id++] = ' ';

    }

    int check(double a, char sign){

    if(a == 0 && sign == '/'){

    printf("除数不能为0!,程序结束。\n");

    system("pause");

    exit(EXIT_FAILURE);

    }

    return 1;

    }

    double cal(double a, double b, char sign){

    switch(sign){

    case '+': return a + b;

    case '-': return a - b;

    case '*': return a * b;

    case '/': return a / b;

    }

    }

    int main(){

    printf("\t\t\t\t简单计算器\n\n");

    printf("\t\t ======================================\n");

    printf("\t\t || 支持+ - * / ( ) 等符号和负数输入 ||\n");

    printf("\t\t ======================================\n");

    printf("\t\t\t\t\t\t原创作者:邱正钢\n");

    printf("\t\t\t\t\t\t完成时间:2014年6月17日\n");

    printf("\t\t\t\t\t\tEmail:2276479303@qq.com\n");

    printf("请输入一个表达式,如 -10*(20.2-30.6)+5.0/2\n以回车结束:\n");

    do{

    gets(buf); id = idSign = idAns = 0;

    if((len = strlen(buf)) == 0) continue;

    int flag = 0; //这个是用来判断'-'字符是负号还是减号的。1表示数字,0表示 +*/(

    /*判断原理:如果第一次读取就碰到-,那么一定是负号,若最近一次读取是+*-/(那么

    也一定是负号,如果是右括号或数字那么是减号*/

    for(i = 0; i < len; ++i){

    if(buf[i] == ' ') continue;

    if(buf[i] >= '0' && buf[i] <= '9' || buf[i] == '.' || buf[i] == '-' && !flag){

    str[id++] = buf[i]; flag = 1;

    }

    else {

    str[id++] = ' '; checkSign(buf[i]);

    if(buf[i] != ')') flag = 0;

    else flag = 1;

    }

    }

    while(idSign) str[id++] = signStack[--idSign];

    for(i = 0, n = 0; i < id; ++i){

    if(str[i] == ' ') continue;

    /*用增加空格的方式判断‘-'字符是负号还是减号,若‘-'后面挨着数字或小数点,那么一定是负号*/

    if(str[i] >= '0' && str[i] <= '9' || str[i] == '.' || str[i] == '-'

    && (str[i+1] >= '0' && str[i+1] <= '9' || str[i+1] == '.')){

    sscanf(str + i, "%lf%n", &ans[idAns++], &n);

    i += n - 1; continue;

    }else if(check(ans[idAns-1], str[i])){

    ans[idAns-2] = cal(ans[idAns-2], ans[idAns-1], str[i]);

    --idAns;

    }

    }

    printf("结果是 %.2lf\n", ans[0]);

    printf("输入Y 继续, N 退出: ");

    scanf("%s", ch);

    }while(ch[0] == 'Y' || ch[0] == 'y');

    printf("感谢您的使用!再见\n");

    system("pause");

    return 0;

    }

    关于计算器的精彩文章请查看《计算器专题》 ,更多精彩等你来发现!

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • 成绩数据包括高数成绩、英语成绩、C语言成绩、总成绩、班级排名、校级排名,其中:高数成绩、英语成绩、C语言成绩为输入项,总成绩、班级排名、校级排名是计算项,班级排名是总成绩在班内的名次,校级排名是总成绩在...

    学生成绩管理管理系统

    (一)学校现状分析

    1、某学校有本科生和研究生两类学生,学生信息包括基本资料数据和成绩数据两部分。

    A.本科生:基本资料数据包括学号、姓名、性别、专业、班级,学号自动生成,其他全部是输入项;成绩数据包括高数成绩、英语成绩、C语言成绩、总成绩、班级排名、校级排名,其中:高数成绩、英语成绩、C语言成绩为输入项,总成绩、班级排名、校级排名是计算项,班级排名是总成绩在班内的名次,校级排名是总成绩在校内的名次。

    B.研究生:基本资料数据包括学号、姓名、性别、专业、班级、研究方向、导师,学号自动生成,其他全部是输入项;成绩数据包括课程综合成绩、论文成绩、总成绩、班级排名、校级排名,其中:课程综合成绩、论文成绩为输入项,总成绩、班级排名、校级排名是计算项,班级排名是总成绩在班内的名次,校级排名是总成绩在校内的名次。

    2、现在需要开发一个学生成绩管理系统对学生成绩进行有效管理。

    (二)系统的功能要求

    1. 数据维护管理:要求对学生的基本资料数据和成绩数据分开管理。基本资料数据的维护管理功能包括添加(批量、单个)、修改、删除、查询等;成绩数据的维护管理功能包括输入(批量、单个)、修改、删除、查询等。

    A. 基本资料数据的维护管理

    (1).添加:(批量、单个)添加学生基本资料数据。本科生的基本资料数据包括学号、姓名、性别、专业、班级,学号自动生成,其他全部是输入项。研究生的基本资料数据包括学号、姓名、性别、专业、班级、研究方向、导师,学号自动生成,其他全部是输入项

    (2).修改:根据学号来修改任意学生的除学号外的其他基本资料数据。

    (3).删除:根据学号删除一个学生。

    (4).查询:根据学号查询一个学生的基本资料数据。

    B. 成绩数据的维护管理

    (1).输入:(批量、单个)输入学生成绩数据。成绩数据根据学生类型的不同而有区别,输入的相关数据也应不同。注意:总成绩、班级排名、校级排名是计算项,不能输入。

    (2).修改:根据学号来修改任意学生的相关成绩数据(注意:不同类别学生相关数据不同)。

    (3).删除:根据学号删除一个学生(不能删除,只需将相关数据项设置成-1)。

    (4).查询:根据学号查询一个学生的成绩数据。

    (5).计算:批量计算所有学生的总成绩、班级排名、校级排名。注意,只有各项数据都为有效数据时(-1为无效数据),才能计算。

    1. 排名功能

    A:班级排名:分本科生和研究生两类学生,计算每个学生总成绩在班级中的名次。

    B:校级排名:分本科生和研究生两类学生,计算每个学生总成绩在全校中的名次。

    说明:排名规则按体育竞赛规则,若出现两个并列第1名,下个名次为第3名,依此类推。

    1. 排序功能:分本科生和研究生两类人员,实现下列排序功能。
      1. 所有学生信息按总成绩从高到低排序并显示。
      2. 某个班学生信息按总成绩从高到低排序并显示。
    2. 查询功能:分本科生和研究生两类人员,实现下列查询功能。
    1. 分页显示全部学生的信息。分页功能:每页显示10条学生的信息,有上一页、下一页、首页和最后一页的功能。
    2. 能够按班级显示本班全部学生信息。注意:无需分页显示。
    3. 能够根据学号或者姓名查询学生信息。
    4. 能够在某个班级中查询某门课成绩不及格学生信息。注意:无需分页显示。
    1. 统计功能:分本科生和研究生两类人员,实现下列统计功能。
    1. 统计并显示某门课每个班的平均成绩。如果学生该门课没有成绩,则统计时忽略该生。
    2. 在某个班中统计并显示某门课程不同等级的学生人数。等级标准:优—成绩大于等于90;良—成绩大于等于80且小于90;中:成绩大于等于70且小于80;及格:成绩大于等于60且小于70;不及格:成绩小于60。

    (三)系统的实现技术要求

    1. 学生用结构体表示,本科生和研究生分别用两个链表来存储表示。
    2. 必须用文件来存储学生信息。

    A.建立本科生和研究生两个文件,分别存放两类学生的信息。

    B. 开始运行程序时,从文件中读取学生信息链入到两个不同的链表。

    C. 退出程序时将学生信息保存到不同的文件。

    D. 主菜单有一个菜单项能够将学生信息保存到文件。

    1. 数据约束:
    1. 学号:整型、不能重复、从1开始依次递增、由软件自动计算产生,不能修改。
    2. 性别:男和女,必须使用枚举类型。
    3. 各种成绩:整型,取值范围为0-100。-1表示未有此项成绩。
    4. 其他:至少有两层菜单。

    程序框架图

    代码资源:https://download.csdn.net/download/whwsadasd/20692593?spm=1001.2014.3001.5501

    运行结果:

     

    分页显示代码(部分):

    void showOneStudent(struct gstudent* nowstudent)
    {
    	switch (nowstudent->sex)
    	{
    	case male:
    		printf("\t\t\t\t%d %s 男 %s %d %s %s %d %d %d %d %d\n", nowstudent->num, nowstudent->name, nowstudent->major, nowstudent->Class, nowstudent->reserch, nowstudent->tname, nowstudent->score[0], nowstudent->score[1], nowstudent->score[2], nowstudent->classrank, nowstudent->allrank);
    		break;
    	case female:
    		printf("\t\t\t\t%d %s 女 %s %d %s %s %d %d %d %d %d\n", nowstudent->num, nowstudent->name, nowstudent->major, nowstudent->Class, nowstudent->reserch, nowstudent->tname, nowstudent->score[0], nowstudent->score[1], nowstudent->score[2], nowstudent->classrank, nowstudent->allrank);
    		break;
    	}
    }
    void getPage(struct gstudent* Head, int page, int pageSize)
    {
    	int nowI = 0;
    	int start = (page - 1) * pageSize + 1;
    	int end = start + pageSize - 1;
    	struct gstudent* p = Head;
    	printHead();
    	while (p != NULL) {
    		nowI++;
    		if (nowI >= start && nowI <= end)
    			showOneStudent(p);
    		else if (nowI > end)
    			break;
    		p = p->next;
    	}
    
    }
    void showAll()
    {
    	int menuItem;
    	int page = 1, PAGESIZE = 10;
    	int totalPage;
    	int error;
    
    	struct gstudent* p = Head->next;
    	int peopleNumber = 0;
    
    	while (p != NULL) {
    		peopleNumber++; p = p->next;
    	}
    	if (peopleNumber == 0) {
    		printf("无相应类别的学生数据!");
    		return;
    	}
    
    	/*计算总页数*/
    	if (peopleNumber % PAGESIZE == 0) {
    		totalPage = peopleNumber / PAGESIZE;
    	}
    	else {
    		totalPage = peopleNumber / PAGESIZE + 1;
    	}
    	/*分页显示*/
    	while (1) {
    		fflush(stdin);
    		if (peopleNumber == 0) {
    			printf("当前无任何学生数据!\n");
    			break;
    		}
    		printf("\n当前第%d页,总共%d页", page, totalPage);
    		printf("-----------------------------------------");
    		printf("-----------------------------------------\n");
    		getPage(Head->next, page, PAGESIZE);
    		printf("\n当前第%d页,总共%d页", page, totalPage);
    
    		printf("-----------------------------------------");
    		printf("-----------------------------------------\n");
    		if (page == 1 && totalPage == 1) {
    			break;
    		}
    		else if (page == 1) {
    			printf("分页菜单:3-下页  4-尾页  5-返回\n");
    			printf("请输入菜单编号(3-5):");
    			do {
    				fflush(stdin);
    				scanf("%d", &menuItem);
    				switch (menuItem) {
    				case 3:page++; error = 0; break;
    				case 4:page = totalPage; error = 0; break;
    				case 5:return;
    				default:error = 1;
    					printf("菜单编号输错,请重新输入菜单编号(3-5):");
    					break;
    				}
    			} while (error);
    		}
    		else if (page == totalPage) {
    			printf("分页菜单:1-首页  2-上页  5-返回\n");
    			printf("请输入菜单编号(1,2,5):");
    			do {
    				fflush(stdin);
    				scanf("%d", &menuItem);
    				switch (menuItem) {
    				case 1:page = 1; error = 0; break;
    				case 2:page--; error = 0; break;
    				case 5:return;
    				default:error = 1;
    					printf("菜单编号输错,请重新输入菜单编号(3-5):");
    					break;
    
    				}
    			} while (error);
    		}
    		else {
    			printf("分页菜单:1-首页  2-上页  3-下页  4-尾页  5-返回\n");
    			printf("请输入菜单编号(1 - 5):");
    			do {
    				fflush(stdin);
    				scanf("%d", &menuItem);
    				switch (menuItem) {
    				case 1:page = 1; error = 0; break;
    				case 2:page--; error = 0; break;
    				case 3:page++; error = 0; break;
    				case 4:page = totalPage; break;
    				case 5:return;
    				default:error = 1;
    					printf("菜单编号输错,请重新输入菜单编号(3-5):");
    					break;
    				}
    			} while (error);
    		}
    
    
    
    	}
    }
    

     

    展开全文
  • 学期考试结束,统计有每班每个人的平均成绩,每门的平均成绩,并按照个人平均成绩从高到低的顺序输出成绩, 输出不及格人名单。输入输出格式自定 假设某班有30人 考试课程自定 将所有同学的成绩保留在文件中,对...

    C语言学生成绩统计系统

    参考很多大佬的程序 …才完成的大一作业 …仅供参考…

    题目要求:
    学期考试结束,统计有每班每个人的平均成绩,每门课的平均成绩,并按照个人平均成绩从高到低的顺序输出成绩,
    输出不及格人名单。输入输出格式自定
    假设某班有30人
    考试课程自定
    将所有同学的成绩保留在文件中,对文件中的数据处理,输入所要求的内容,程序的功能主要包括以下方面
    1.输入成绩到文件中
    2.输出成绩
    3.输出不及格学生名单
    4.成绩排序
    5.删除记录
    6.插入记录
    7.修改记录
    主函数中对以上功能选择,调用对应的函数完成

    注意事项

    1.文件打开方式
    r 只读 文件必须存在,否则打开失败
    w 只写 如果文件存在,则清除源文件内容;如果文件不存在,则新建文件。
    a 追加只写 如果文件存在,则在打开文件上追加;文件不存在,则新建。
    r+ 读写 文件必须存在
    w+ 读写
    a+ 读写
    2.对于字符串的比较 拷贝等操作
    字符串的操作与其他不同,要特别注意,下面的代码避免了字符串的操作
    偷懒ing
    3.命名语义化
    增加可读性
    4.注释
    注释!!一定要写!!不然!几天之后。。。。。它就好像变成了。。别人写的代码!!小白郁闷中

    源码

    
    # include <stdio.h>
    # include <string.h>
    # include <stdlib.h> 
    # include <conio.h>
    

    函数声明部分

    void showmenu(void);		//显示用户选择菜单 
    void inputstudent(int);		//输入学生成绩函数
    void printstudent(int);		//输出学生成绩函数
    void notpass(int);			//输出不及格学生名单函数
    void sort(int);				//计算学生名次函数 
    void allsort(int);			//学生成绩排名函数 
    int delstudent(int);		//删除学生记录函数 
    int instudent(int);			//插入学生记录函数 
    void sublist(int); 			//各科平均成绩统计函数 
    int change(int);			//修改学生成绩函数 
    
    

    学生结构体

    struct student
    {
    	int size;				//学号 
    	char name[10];			//姓名 
    	int english;			//英语成绩 
    	int Clanguage;			//C语言成绩 
    	int math;				//高数成绩 
    	int PE;					//体育成绩 
    	float average;			//平均成绩 
    	int rank; 				//排名 
    }; 
    

    main函数

    int main()
    {
    	int flag, n=0, count=0;//flag用来记录用户选择的功能号码,count当前总人数
    	//判断文件里面有多少条记录	
    	FILE *fp;   
    	fp=fopen("cj.txt","a+");
    	if (fp == NULL)
    	{
    		printf("打开文件失败,请重试......\n");
    		getch();	      //当用户按下某个字符时,程序自动读取,无需按回车,
    		fclose(fp);	 //关闭文件 
    		exit(0);	//exit()是退出的意思,传入的参数是程序退出时的状态码,0表示正常退出,其他表示非正常退出。 
    	}
    	int c = 0;
    	while (!feof(fp)) 
    	{
    		char cc = fgetc(fp); 
    		if (cc == EOF)
    		{ 
    			break;
    		}
    		c++;
    	}
    	printf("\t当前文件学生记录数:%d\n",count);
    	fclose(fp);
    	
    	
    	do
    	{
    		showmenu();   //调用显示提示菜单函数 
    		printf("\t请输入你要选择的功能代号\n") ;
    		scanf("%d",&flag);//用户输入要选择的功能号码 
    		switch(flag)
    		{
    			//功能1,输入需要输入的学生的人数n,录入 n个学生记录 
    			case 1:printf("\t请输入您要输入学生的人数:\n");
    				scanf("%d",&n);
    				inputstudent(n);
    				count += n;
    				break;
    			//功能2,输出文件中的学生信息 
    			case 2:
    				printf("\t输出学生信息:\n"); 
    				printstudent(count);
    				break;
    			//功能3,输出文件中不及格学生的名单 
    			case 3:
    				printf("\t输出不及格学生名单:\n");
    				notpass(count);
    				break;
    			//功能4,统计每一个科目的平均成绩 
    			case 4:
    				printf("\t为您统计各科平均成绩:\n");
    				sublist(count);
    				break;
    			//功能5,按照学生的平均成绩排序 
    			case 5:
    				printf("成绩排序结果如下:\n");
    				sort(count); //更新每条记录的rank 
    				allsort(count);//冒泡法排序,并输出记录 
    				break;
    			//功能6,输入要删除学生的学号,然后按照学号删除学生记录 
    			case 6:
    				printf("\t为您删除学生记录\n");
    				count=delstudent(count);
    				printf("\t删除记录后学生人数:%d\n",count); 
    				break;
    			//功能7,输入要插入的学生的学号,判断学生存不存在,存在则退出,不存在则在文件后面追加 
    			case 7:
    				printf("\t为您插入学生记录\n");
    				count=instudent(count);
    				printf("\t插入记录后学生人数:%d\n",count);
    				break;
    			//功能8,修改学生成绩 
    			case 8:
    				change(count);
    				break;
    			//功能0,退出系统
    			case 0:
    				printf("\t系统退出,感谢使用......\n\t欢迎再次使用!\n"); 
    				exit(0);//退出系统函数 
    				break;
    		
    			default://输入信息有误
    				printf("\t您的输入有误,请重新输入!\n");
    				break;
    		 } 
    	}while(flag != 0);
    	getch();
    	
    	
    	return 0;
    	
     } 
    

    showmenu 提示菜单显示内容

    
     void showmenu()
     {
    	printf("\t*******************************************\n");
    	printf("\t           学生成绩统计系统\n");
    	printf("\t*******************************************\n"); 
    	printf("\t1.输入学生信息----------------------------1\n");
    	printf("\t2.输出学生信息----------------------------2\n");
    	printf("\t3.输出不及格学生名单----------------------3\n");
    	printf("\t4.成绩统计--------------------------------4\n");
    	printf("\t5.成绩排序--------------------------------5\n");
    	printf("\t6.删除记录--------------------------------6\n");
    	printf("\t7.插入记录--------------------------------7\n");
    	printf("\t8.修改记录--------------------------------8\n");
    	printf("\t0.退出系统,感谢使用----------------------0\n");
    	printf("\t*******************************************\n");
    	
     } 
    
    

    inputstudent 输入学生信息

     void inputstudent(int n)
     {
     	struct student stu[50];//student结构分配空间 
     	FILE *fp;
     	fp = fopen("cj.txt","a+");//追加方式打开文件 
     	if(fp == NULL)
     	{
     		printf("\t打开文件失败,请重试\n");
     		getch();
    		fclose(fp);
    		exit(0); 
    	} 
    	 printf("\t请输入学生的学号,姓名,英语成绩,C语言成绩,高数成绩,体育成绩 \n"); 
    	 int i;
    	 for (i = 0; i < n ; i ++)
    	 {
    		printf("\t第%d个学生信息\n",i+1);
    		scanf("%d %s %d %d %d %d",&stu[i].size,&stu[i].name,&stu[i].english,&stu[i].Clanguage,&stu[i].math,&stu[i].PE);
    		//可以在这里求出每个学生的平均成绩 
    		stu[i].average=(stu[i].english+stu[i].Clanguage+stu[i].math+stu[i].PE)/4;
    		stu[i].rank=0;
    		
    		
    		//写入数据   上面求出每个学生的平均成绩要在下面加一个%d 
    		fprintf(fp,"%d %s %d %d %d %d %f %d\n",stu[i].size,stu[i].name,stu[i].english,stu[i].Clanguage,stu[i].math,stu[i].PE,stu[i].average,stu[i].rank ); 
    	 } 
    	 
    	 fclose(fp);
    	 printf("添加学生成功,请按任意键返回\n");
    	 getch();
    	 
      } 
    

    输出学生信息

     void printstudent(int n)
     {
     	struct student stu[50];
     	int i;
     	printf("学生成绩信息如下:\n");
     	FILE *fp;
     	fp = fopen("cj.txt","r");
     	if(fp==NULL)
     	{
     		printf("\t打开文件失败,请重试\n") ;
     		getch();
     		fclose(fp);
     		exit(0);
    	 } 
    	 printf("\t学号\t姓名\t    英语成绩\t    C语言成绩\t    高数成绩\t    体育成绩\t       平均成绩    \t名次\n");
    	 
    	 
    	 int c = 0;
    	 while (!feof(fp))
    	 {
    	 	fscanf(fp,"%d %s %d %d %d %d %f %d\n",&stu[c].size,&stu[c].name,&stu[c].english,&stu[c].Clanguage,&stu[c].math,&stu[c].PE,&stu[c].average,&stu[c].rank);
    	 	c++;
    	 }
    	 
    	 
    	  
    	 if(n!=0)//人数不为0 
    	 {
    	 	for(i=0;i<c;i++)
    	 	{
    	 		printf("\t%d\t%s\t\t%d\t\t%d\t\t%d\t\t%d\t\t%.2f\t\t%d\n",stu[i].size,stu[i].name ,stu[i].english ,stu[i].Clanguage ,stu[i].math ,stu[i].PE ,stu[i].average,stu[i].rank );//可以加上平均分 
    		 }
    	 	
    	 }
    	 fclose(fp);
    	 printf("显示完毕,请按任意键返回\n");
    	 getch();
    	 
    	 return; 
    
      } 
     
    

    输出不及格学生名单

     void notpass(int n)
     {
     	struct student stu[50];
     	int i;
     	printf("不及格学生信息显示如下:\n");
     	FILE *fp;
     	fp=fopen("cj.txt","r");
     	if(fp==NULL)
     	{
     		printf("\t打开文件失败,请重试\n") ;
     		getch();
     		fclose(fp);
     		exit(0);
    	 } 
    	 printf("\t学号\t姓名\t    英语成绩\t    C语言成绩\t    高数成绩\t    体育成绩\t       平均成绩\t    名次\n");//可以加上平均分
    	 int c = 0;
    	 while(!feof(fp))
    	 {
    	 	//fscanf从一个流中执行格式化输入,fscanf遇到空格和换行是结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。 
    		fscanf(fp,"%d %s %d %d %d %d %f %d\n",&stu[c].size,&stu[c].name,&stu[c].english,&stu[c].Clanguage,&stu[c].math ,&stu[c].PE ,&stu[c].average ,&stu[c].rank );//可以加上平均分 
    		 c ++;
    	 }
    
    
    	 if(n!=0)//人数部位0 
    	 {
    	 	for(i=0;i<c;i++)
    	 	{
    	 		if(stu[i].average < 60.00)
    			 { 
    	 			printf("\t%d\t%s\t\t%d\t\t%d\t\t%d\t\t%d\t\t%.2f\t\t%d\n",stu[i].size,stu[i].name ,stu[i].english ,stu[i].Clanguage ,stu[i].math ,stu[i].PE ,stu[i].average,stu[i].rank );//可以加上平均分 
    	 	 	}
    		 }
    	 	
    	 }
    	 fclose(fp);
    	 printf("显示完毕,请按任意键返回\n");
    	 getch();
    	 return; 
    
      } 
    

    成绩统计

    void sublist(int n)
    {
    	struct student stu[50];
    	float subenglish=0.0,subClanguage=0.0,submath=0.0,subPE=0.0; 
    	FILE *fp;
    	fp=fopen("cj.txt","r");
    	if(fp==NULL)
    	{
    		printf("打开文件失败!\n");
    		getch();
    		exit(0);
    	}
    	int c = 0;
    	while(!feof(fp)){
    		fscanf(fp,"%d %s %d %d %d %d %f %d\n",&stu[c].size,&stu[c].name,&stu[c].english,&stu[c].Clanguage,&stu[c].math,&stu[c].PE,&stu[c].average,&stu[c].rank);
    		subenglish +=stu[c].english;
    		subClanguage += stu[c].Clanguage;
    		submath += stu[c].math;
    		subPE += stu[c].PE;
    		c++;
    	}
    	fclose(fp);
    	printf("\t英语的平均成绩为:%.2f\n",subenglish/c);
    	printf("\tC语言的平均成绩为:%.2f\n",subClanguage/c);
    	printf("\t高数的平均成绩为:%.2f\n",submath/c);
    	printf("\t体育的平均成绩为:%.2f\n",subPE/c);
    	 
    }
    

    成绩排序并输入排序后的学生名单

     //成绩按找冒泡法进行排序
    void sort(int n)
    {
    	struct student stu[50];
    	int i,j,temp;
    	int count;
    	FILE *fp;
    	fp=fopen("cj.txt","r");
    	if(fp==NULL)
    	{
    		printf("打开文件失败!\n");
    		getch();
    		exit(0);
    	}
        int c = 0;
    	while(!feof(fp)){
    		fscanf(fp,"%d %s %d %d %d %d %f %d\n",&stu[c].size,&stu[c].name,&stu[c].english,&stu[c].Clanguage,&stu[c].math,&stu[c].PE,&stu[c].average,&stu[c].rank);
    		stu[c].average = (stu[c].english + stu[c].Clanguage + stu[c].math + stu[c].PE)/4;
    		c++;
    	}
    	fclose(fp);
    	//计算排名并存储  用每一名学生的average和其他的每一个学生去比较,有几个同学的average比这一名同学大就加上几 有一名则1+1=2 
        for(i=0;i<n;i++)
        {
    	    temp=1;//第1名 
    	    for(j=0;j<n;j++){
    	    	if(stu[i].average<stu[j].average) temp++; //如果较小,temp++ ,排名下降1名
    		} 
    		stu[i].rank=temp;
        }
        //更新记录 
        fp=fopen("cj.txt","w");
       	for(i=0;i<n;i++)
       	{
    	    fprintf(fp,"%d %s %d %d %d %d %f %d\n",stu[i].size,stu[i].name,stu[i].english,stu[i].Clanguage,stu[i].math,stu[i].PE,stu[i].average,stu[i].rank);	
       	}
    	fclose(fp);
        printf("排名成功......\n");
        return;       
    
    
    }
    
    //排序输出所有同学的名单 
    void allsort(int n)
    {
      	struct student stu[100];	
      	struct student temp;	
    	FILE *fp; 
    	fp=fopen("cj.txt ","r");
    	if(fp==NULL)
    	{
    		printf("打开文件失败!\n");
    		getch();
    		exit(0); 
    	}
    	int c = 0;
    	while(!feof(fp)){
    		fscanf(fp,"%d %s %d %d %d %d %f %d\n",&stu[c].size,&stu[c].name,&stu[c].english,&stu[c].Clanguage,&stu[c].math,&stu[c].PE,&stu[c].average,&stu[c].rank);
    		c++;
    	}
    	int i,j;
    
    		//冒泡排序算法:进行 n-1 轮比较
    	    for(i=0; i<n-1; i++){
    	        //每一轮比较前 n-1-i 个,已经排序好的最后 i 个不用比较
    	        for(j=0; j<n-1-i; j++){
    	            if(stu[j].average < stu[j+1].average){
    	                temp = stu[j];
    	                stu[j] = stu[j+1];
    	                stu[j+1] = temp;
    	            }
    	        }
    	    }
    	    printf("\t学号\t姓名\t    英语成绩\t    C语言成绩\t    高数成绩\t    体育成绩\t       平均成绩\t    名次\n");
    	    for(i=0;i<n;i++)
    	    {
    			printf("\t%d\t%s\t\t%d\t\t%d\t\t%d\t\t%d\t\t%.2f\t\t%d\n",stu[i].size,stu[i].name,stu[i].english,stu[i].Clanguage,stu[i].math,stu[i].PE,stu[i].average,stu[i].rank);
    		}
    		printf("按任意键返回\n");
    		getch();
    		fclose(fp);
    		return;
        
    } 
    

    删除记录

    int delstudent(int n)
    {
    	struct student stu[50];
    	struct student newstu[50];//删除后的结构体数组 
    	//char stusize[10];//学号
    	int stusize;
    	int find=0;
    	printf("\t请输入您要删除的学生的学号:\n"); 
    	scanf("%d", &stusize);
    	FILE *fp;
    	fp=fopen("cj.txt","r");
    	if(fp==NULL)
    	{
    		printf("\t打开文件失败,请重试.....\n");
    		getch(); 
    		return -1;   
    	}
    	int c=0;
    	int index=0;//index记录目标序号 
    	while(!feof(fp))//不为空
    	{ 
    		fscanf(fp,"%d %s %d %d %d %d %f %d\n", &stu[c].size,&stu[c].name,&stu[c].english,&stu[c].Clanguage,&stu[c].math,&stu[c].PE,&stu[c].average,&stu[c].rank);
    		//if(strcmp(stusize,stu[c].size)==0)
    		if(stusize == stu[c].size) 
    		{
    			find = 1;//根据学号查找,找到赋值为1 
    			index = c;//记录编号
    		} 
    		c++;
    	}
    	fclose(fp);
    	if(n==0)
    	{
    		printf("\t已经没有学生成绩信息了,请按任意键返回......\n");
    		getch();  
    		return n;
    	}
    	if(find==0)
    	{
    		printf("\t没有该学生成绩信息,请按任意键返回......\n");
    		getch();  
    		return n;
    	}
    	else 
    	{
    		int i;
    		//删除 
    		for( i=0;i<c;i++)
    		{
    			if(i < index)
    			{
    				newstu[i] = stu[i];
    			}
    			else
    			{
    				newstu[i] = stu[i+1];
    			}
    		}
    		
    		fp=fopen("cj.txt","w");
    		//写入数据  
    		for(i=0;i<c-1;i++)
    		{
    			fprintf(fp,"%d %s %d %d %d %d %f %d\n",newstu[i].size,newstu[i].name,newstu[i].english,newstu[i].Clanguage,newstu[i].math,newstu[i].PE,newstu[i].average,newstu[i].rank); 	
    		} 
    		fclose(fp);
    		printf("\t学号为%d的学生记录已经删除成功,请按任意键返回......\n",stusize);
    		getch();
    		return n-1;
    	}     
    }
    

    插入记录

    int instudent(int n)
    {
    	struct student stu[50];
    	//char stusize[10];//学号
    	int stusize;
    	int find=0;
    	printf("\t请输入您要插入的学生的学号:\n"); 
    	scanf("%d", &stusize);
    	FILE *fp;
    	fp=fopen("cj.txt","r");
    	if(fp==NULL)
    	{
    		printf("\t打开文件失败,请重试.....\n");
    		getch(); 
    		return -1;   
    	}
    	int c=0;
    	int index=0;//index记录目标序号 
    	while(!feof(fp))//不为空
    	{ 
    		fscanf(fp,"%d %s %d %d %d %d %f %d\n", &stu[c].size,&stu[c].name,&stu[c].english,&stu[c].Clanguage,&stu[c].math,&stu[c].PE,&stu[c].average,&stu[c].rank);
    		//if(strcmp(stusize,stu[c].size)==0)
    		if(stusize == stu[c].size) 
    		{
    			find = 1;//根据学号查找,找到赋值为1 
    			index = c;//记录编号
    		} 
    		c++;
    	}
    	fclose(fp);
    	if(find==1)
    	{
    		printf("\t已经存在该学生信息,无需添加,请按任意键返回......\n");
    		getch();  
    		return n;
    	}
    	
    	fp=fopen("cj.txt","a");		//在原来数据上追加一条新记录
    	printf("\t请输入学生的学号,姓名,英语成绩,C语言成绩,高数成绩,体育成绩 \n"); 
    	scanf("%d %s %d %d %d %d",&stu[c].size,&stu[c].name,&stu[c].english,&stu[c].Clanguage,&stu[c].math,&stu[c].PE);
    	stu[c].average=(stu[c].english+stu[c].Clanguage+stu[c].math+stu[c].PE)/4;
    	stu[c].rank=0;
    		
    		
    	fprintf(fp,"%d %s %d %d %d %d %f %d\n",stu[c].size,stu[c].name,stu[c].english,stu[c].Clanguage,stu[c].math,stu[c].PE,stu[c].average,stu[c].rank ); 
    	
    	  
    	fclose(fp);
    	printf("\t学号为%d的学生记录已经插入成功,请按任意键返回......\n",stusize);
    	getch();
    	return n+1;
    	   
    }
    

    按照学生学号修改学生成绩

    int change(int n) 
    {	
    	struct student stu[50];
     	FILE *fp;
     	int stusize;
     	int find=0;  
     	printf("\t请输入要修改的学生学号:\n");
     	scanf("%d",&stusize);
     	fp=fopen("cj.txt","r");
     	if(fp==NULL)
     	{
    	  	printf("文件打开失败,请重试.....\n");
    	  	getch();
    	  	return -1;	
     	}
     	int c=0;
     	while(!feof(fp))
    	{
    	 	fscanf(fp,"%d %s %d %d %d %d %f %d\n",&stu[c].size,&stu[c].name,&stu[c].english,&stu[c].Clanguage,&stu[c].math,&stu[c].PE,&stu[c].average,&stu[c].rank);
    	 	if(stu[c].size==stusize)	
    		{
    		 	find=1;
    		 	//修改操作 
    		 	printf("\t找到你要修改成绩的同学,请输入他的成绩:\n");
    		 	printf("\t英语成绩: %d,新成绩为:\n",stu[c].english);
    		 	scanf("%d",&stu[c].english);
    		 	printf("\tC语言成绩: %d,新成绩为:\n",stu[c].Clanguage); 
    		 	scanf("%d",&stu[c].Clanguage);
    		 	printf("\t高数成绩: %d,新成绩为:\n",stu[c].math);
    		 	scanf("%d",&stu[c].math);
    		 	printf("\t体育成绩:%d,新成绩为\n",stu[c].PE);
    		 	scanf("%d",&stu[c].PE);
    		 	stu[c].average=(stu[c].english+stu[c].Clanguage+stu[c].math+stu[c].PE)/4;
     		}
      		c++;	
     	}
    	fclose(fp);
    	if(find==0)
    	{
    		printf("没有找到要删除的学生记录,请按任意键退出\n");
    		getch(); 
    	} 
    	else
     	{
    	  	fp=fopen("cj.txt","w");
    	  	int i; 
    	   	for(i=0;i<n;i++)
    	   	{
    	   		//更新数据 
    		    fprintf(fp,"%d %s %d %d %d %d %f %d\n",stu[i].size,stu[i].name,stu[i].english,stu[i].Clanguage,stu[i].math,stu[i].PE,stu[i].average,stu[i].rank);	
    	   	}
    		fclose(fp);	 
    		printf("学号为%d同学的成绩已经修改成功,请按任意键返回\n",stusize);
     		getch(); 
     	}
      	return 1; 
    }
       
    
    展开全文
  • 第一次写这么长的程序,代码仅供參考,有问题请留言。 /* ** 学生信息管理系统 ** IDE:Dev-Cpp 4.9.9.2 ** 2014-6-15 */ #include <stdio.h> #include <stdlib.h>...algorithm...
  • ** 设计目的:简单计算器,计算形如10*(20.2-30.6)+5.0/2的表达式值 ** 简要原理:中缀式转逆波兰式(后缀式) ** IDE:Dev-Cpp 4.9.9.2 ** 注意事项:括号必须是英文状态的 ** 时间: 2014-6-17 \*==========...
  • 第一次写这么长的程序,代码仅供参考,有问题请留言。/***学生信息管理系统**IDE:Dev-Cpp 4.9.9.2**2014-6-15*/#include #include #include #include #include using std::sort;using std::vector;...
  • /*===============================================***设计目的:简单计算器,计算形如10*(20.2-30.6)+5.0/2的表达式值**简要原理:中缀式转逆波兰式(后缀式)**IDE:Dev-Cpp 4.9.9.2**注意事项:括号必须是英文状态...
  • 综合性程序设计报告设计题目: 车辆违章查询系统指导教师: 朱世敏班 级: 21214学 号: 2121416设 计 者: 孙令朝成 绩: _______________设计时间: 2012 年 12 月 9日综合性程序设计报告题目要求: 能够根据车辆的牌号,...
  • C语言结课论文.docx

    2020-03-07 17:04:42
    C语言结课论文 C语言学习体会 摘要在科技高度发展的今天计算机在人们之中的作用越来越突出而C 语言作为一种计算机的语言我们学习它有助于我们更好的了解计算机与计算机进行交流学习C语言程序设计课程旨在使学生掌握...
  • 图书管理系统(c语言结课作业)

    千次阅读 2019-05-22 19:28:19
    c语言结课作业 用书:c程序设计 闫锴 张连浩 关于代码 书上程序结构混乱 也有很多bug 我也没怎么改 所以输入样例都是严格按照输入输出格式来的 就别吐槽了 另外数据通过二进制文件进行存放更新 #...
  • C语言程序设计课程试题!中央广播电视大学2008秋季C语言程序设计A课程试卷(4)题 号一二三四五总 分得 分2009年1月已考一、单选题(每小题2分,共20分)1. 由C语言目标文件连接而成的可执行文件的缺省扩展名为( )。A. ...
  • C语言结课作业 学生管理系统

    千次阅读 2018-06-10 20:43:46
    有一组学生信息,包括学号,姓名,性别,出生日期,还有语文、数学、英语、科学、体育等5门课程的成绩,设计一个程序,对这些信息进行管理,包括学生信息的创建、增加、删除、修改、查找等。程序设计如图:还是有...
  • 设计一个学生信息管理系统,该系统包含学生信息和学生所在系的信息。其中,学生信息包括学生学号、姓名、性别、年龄、三门课程的成绩、总成绩、学生所在系的系号,学生所在系的信息包括系号、系名、系主任、系的办公...
  • 本系统通过多模块化设计进行开发,包含三个.c文件(main.c、function.c和extra.c)、一个function.h文件和一个student.txt文件。实现的功能有:对学生的学号自动分配,对学生数据的读取、插入、删除、查询、输出等,...
  • #include #include #include #include #include using namespace std; struct record { char xuehao[20];  char name[20];  char old[20];  char sex[20];  char date[20];... char addre
  • 有一组学生信息,包括学号,姓名,性别,出生日期,还有语文、数学、英语、科学、体育等5门课程的成绩,设计一个程序,对这些信息进行管理,包括学生信息的创建、增加、删除、修改、查找等。#include #include //...
  • C语言程序分析报告课程标准徽商职业学院C语言程序设计课程标准课程编码课程类别B适用专业软件、信管、自动化授课单位电子信息系学 分4学 时64编写执笔人王艳兵审定负责人编写日期2012.9.18审定日期一、课程概述(一)...
  • C语言从文件中读取一个结构体数组和把修改后的结构体数组存入到一个文件中 本人基础知识不在解释,帖子是我自己编的一个例子,很好理解,尤其是对初学C语言的童鞋,希望大家可以从中了解到用C语言从文件中读取一个...
  • 本文主要对C语言程序设计进行了总结,希望对你的学习有所帮助。
  • C语言程序设计

    2020-08-03 13:19:24
    真正的程序设计高手不是语法上的精通而是程序总体架构,算法上的周密。当初大学时都是利用C51写的51单片机的程序,根本就不管程序的可维护性,程序大小,就是一个C文件中包含了全部的函数体。在工作中这是一个完全不...
  • 摘要:《C语言程序设计》作为一门流行的高级程序设计语言,在高职院校的教学中占有重要的地位。教师如何上好该课程,以及如何引导学生学好该课程,该文就这两个问题展开初步的探讨。关键词:《C语言程序设计》课程;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,997
精华内容 1,198
关键字:

c语言结课设计

c语言 订阅