VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 574|回复: 0

[交流] 求大神指点

[复制链接]
52_avatar_middle
在线会员 钟山牛 发表于 2017-6-14 15:47:33 | 显示全部楼层 |阅读模式
#include"stdio.h"
#include"string.h"
#include"conio.h"
#include"bios.h"
#include"stdlib.h"
#define M 50
#define N 3
#define ESC    0x011b
#define UP     0x4800
#define DOWN   0x5000
#define ENTER  0x1C0D
void newfile();
void loadfile();
void savefile();
void append();
void modify();
void deleted();
void search();
void tongji();
void print();
void printall();

struct student
{
        char number[11];
    char name[11];
    char class1[13];
    int score[N];
};
struct student stu[N];
char kemu[N][10]={"数学","英语","语文"};
int key,i,y;char *buf;char cf[8][50]={"1:新建文件","2:添加学生信息","3:修改学生信息","4:删除学生信息","5:学生成绩查询","6:学生信息统计","7:学生成绩输出","0退出"};
int n=-1;


void main()
{
  textbackground(WHITE);
  textcolor(BLACK);
  clrscr();
  y=4;
  while(1)
  {
    textbackground(BLUE);
        clrscr();
        for(i=0;i<8;i++)
        {
                gotoxy(11,i+4);
                if(i==y-4)
                {
                  textbackground(GREEN);
                  textcolor(WHITE);
                }
                else
                {
                  textbackground(BLUE);
                  textcolor(WHITE);
                }
                cputs(cf[i]);
        }
        key=bioskey(0);
                switch(key)
        {
case UP:
        y=(y==4)?11:y-1;
        break;
case DOWN:
        y=(y==11)?4:y+1;
                break;
case ENTER:
        if(y==11)
                exit(0);
        else
        {
                clrscr();
                switch(y)
                {
                case 4:newfile();break;
                case 5:append();break;
                case 6:modify();break;
                case 7:deleted();break;
                case 8:search();break;
                case 9:tongji();break;
                case 10:print();break;
                case 11:exit(1);break;
                }
        }
        getch();
        break;
case ESC:
        exit(0);
        break;
        }
  }
}

void newfile()
{
int sle;
FILE *fp;
        scanf("%d",&sle);
        switch(sle)
        {       
        case 1:
                if((fp=fopen("stu_data.txt","wb+"))!=NULL) printf("新建成功!");
                n=0;
                return;
        case 2:
                loadfile();return;
        case 0:
                return;
        default:
                printf("输入错误,请重新输入!");
        }
        fclose(fp);
}

void loadfile()
{
    FILE *fp;
    int i=0;
    if(n!=-1)
        {
          printf("\n\t文件已经导入。.\n\t按任意键继续");getch();return;
        }
        if((fp=fopen("stu_data","rb"))==NULL)
        {printf("\n\n打不开文件!");n=-1;getch();return;}
        while(fread(&stu[i],sizeof(struct student),1,fp)==1) i++;
        n=i;
        printf("\n\n导入结束,共导入%d个学生数据。\n\t按任意键继续",i);
        fclose(fp);
        getch();return;
}

void savefile()
{
    int i;
        FILE *fp;
        fp=fopen("stu_data","rb+");
        for(i=0;i<n;i++)
                fwrite(&stu[i],sizeof(struct student),1,fp);
        printf("\n\t存盘成功,按任意键继续");
        fclose(fp);
}

void append()
{
   int i,j,k;char c;
   loadfile();
   printf("请输入你要添加的学生记录个数:");scanf("%d",&k);
   for(i=n;i<n+k;i++)
   {
       clrscr();
           printf("请输入第%d个学生数据:\n",i-n+1);
           printf("学号:");scanf("%s",stu[i].number);
           printf("姓名:");scanf("%s",stu[i].name);
       printf("班级:");scanf("%s",stu[i].class1);
           printf("%d门课的成绩:\n",N);
           for(j=0;j<N;j++)
           {printf("%s:",kemu[j]);scanf("%d",&stu[i].score[j]);}
   }
   printf("\n\t添加完毕,现在学生信息库中共有%d条记录.\n\t",n+k);
   n+=k;
   getch();
   savefile();
   return;
}

void modify()
{
   char num[11];
   char sele,sele2;
   int a[N];
   int i,j;
  clrscr();
   loadfile();
   printf("请输入学号:");
   scanf("%s",num);
   for(i=0;i<n;i++) if(strcmp(stu[i].number,num)==0)break;
   if(i==0) printf("没有此学号");
   else
   {
           printf("学号: %s姓名:%s班级:%s",stu[i].number,stu[i].name,stu[i].class1);
   for(j=0;j<N;j++)printf("%s:%4d",kemu[j],stu[i].score[j]);
   printf("\n请输入%d门课程的新成绩:\n",N);
   for(j=0;j<N;j++) scanf("%d",&a[j]);
   printf("\n确实要修改这个学生的成绩吗?(Y/N)");
   scanf("%c%c",&sele2,&sele);
   if(sele=='Y'||sele=='y')
   {
     for(j=0;j<N;j++) stu[i].score[j]=a[j];
         printf("\n\t修改完毕.");
   }
   else printf("\n\t没有修改");
   }
   getch();
   savefile();
   return;
}

void deleted()
{
        char num[11];
    int i,j;
        char sele;
        clrscr();
        loadfile();
        printf("\n\t请输入你要删除的学生的学号:");scanf("%s",num);
        for(i=0;i<n;i++) if(strcmp(stu[i].number,num)==0) break;
        if(i==n) printf("\t没有此学号.");
        else
        {
                printf("学号:%s 姓名:%s 班级:%s",stu[i].number,stu[i].name,stu[i].class1);
                printf("\n确实要删除这个学生的数据吗?(Y/N):");
                scanf("%c%c",&sele,&sele);
                if(sele=='Y'||sele=='y')
                {
                        for(j=i+1;j<n;j++)
                                stu[j-1]=stu[j];
                        n--;
                        printf("\n\t删除完毕,现在共有%d个数据:\n",n);
                }
        }
        getch();
        savefile();
        return;
}


void search()
{
        int sle;
        char name[11];
        int i,j,count=0,sum=0;
        struct student *p;
        clrscr();
        while(1)
        {
            clrscr();
                gotoxy(30,4);
                gotoxy(30,6);printf("1:按姓名查询学生成绩");
                gotoxy(30,12);printf("其他: 返回");
                gotoxy(30,14);printf("请输入:");
                scanf("%d",&sle);
                if(sle!=1) return;
                else
                {
                        printf(" 请输入你要查询的学生姓名:");
                        scanf("%s",name);
                        for(p=stu;p<stu+n;p++)
                        {  
                                if(strcmp(p->name,name)==0)
                                {
                                    count++;
                                    if(count==1)
                                        {
                                           printf("  学号  姓名  班级");
                                           for(j=0;j<N;j++)
                                                    printf("%6s",kemu[j]);
                                           printf("总分");printf("\n");
                                           for(j=0;j<78;j++) printf("-");printf("\n");
                                        }
                                    printf("%-7s%-7s%-10s",stu[p-stu].number,stu[p-stu].name,stu[p-stu].class1);
                    for(j=0;j<N;j++)
                                        {
                           printf("%6d",stu[p-stu].score[j]);
                           sum+=stu[p-stu].score[j];
                                        }
                                            printf("%6d",sum);
                                            printf("\n");
                                }
                        }
                    if(count==0) printf("\n\t对不起,没有相符的记录!");
                        else { printf("\n\t共找到%d个记录。",count);}
                     printf("\n\t按任意键返回");
                     getch();
                }
        }       
}


void tongji()
{
        int sle;
        int sc[N];
        int i,j;
        clrscr();
        loadfile();
        while(1)
        {
                clrscr();
                gotoxy(30,10);printf("1:统计各门课程及格的人数");
                gotoxy(30,12);printf("其他-返回");
                gotoxy(30,14);printf("请输入你的选择(1或其他):");
                scanf("%d",&sle);
                if(sle!=1)
                 return;
                else
                {
                        for(i=0;i<N;i++) sc[i]=0;
                        for(j=0;j<N;j++)
                                for(i=0;i<n;i++) if(stu[i].score[j]>=60) sc[j]++;
                                gotoxy(30,5);printf("   课程      及格人数");
                                gotoxy(30,6);printf("--------------------------");
                                for(i=0;i<N;i++)
                                { gotoxy(30,7+i);printf("%s  %12d",kemu[i],sc[i]);}
                                        gotoxy(30,16);printf("按任意键返回"); getch();
                }
        }
}


void print()
{
        int i,j,k;
        int sle;
        int sum1,sum2;
        struct student temp;
        clrscr();
        loadfile();
        while(1)
        {
            clrscr();
                gotoxy(30,4);printf("学生成绩输出");
                gotoxy(30,6);printf("1-按学号顺序输出学生信息");
                gotoxy(30,8);printf("2-按总分顺序输出学生信息");
                gotoxy(30,16);printf("0-返回");
                gotoxy(30,18);printf("请输入你的选择(0--2):");
                scanf("%d",&sle);
                switch(sle)
                {
                case 1:
                        {  
                            for(i=0;i<n-1;i++)
                                {
                                    k=i;
                                    for(j=i;j<n;j++)
                                            if(strcmp(stu[j].number,stu[k].number)<0) k=j;
                                        if(k!=i) {temp=stu[i];stu[i]=stu[k];stu[k]=temp;}
                                }
                              printall();
                            break;
                        }
                case 2:
                        {
                                printf("打开 ok");
                                for(i=0;i<n-1;i++)
                                {
                                        k=i;
                                        for(j=0;j<n-1-i;j++)
                                        {
                                                for(k=0,sum1=0;k<N;k++)
                                                        sum1+=stu[j].score[k];
                                                for(k=0,sum2=0;k<N;k++)
                                                        sum2+=stu[j+1].score[k];
                                                if(sum1>sum2) {temp=stu[j];stu[j]=stu[j+1];stu[j+1]=temp;}
                                        }
                                }
                                printall();
                        }
                case 0:return;
                default:printf("输入错误,请重新输入!");
                getch();
                }
        }
}

void printall()
{
        int i,j,sum=0;
        for(i=0;i<n;i++)
        {
                if(i%20==0)
                {
                        clrscr();
                        printf("  学号  姓名  班级");
                        for(j=0;j<N;j++) printf("%8s",kemu[j]);
                        printf("  总分");
                        printf("\n");
                        for(j=0;j<78;j++) printf("-");
                        printf("\n");
                }
                printf("%-7s%-7s\t%-10s%",stu[i].number,stu[i].name,stu[i].class1);
                for(j=0,sum=0;j<N;j++)
                {
                        printf("8%d",stu[i].score[j]);
                        sum+=stu[i].score[j];
                }
                printf("%8d",sum);
                printf("\n");
                if((i+1)%20==0||i==n-1)
                {
                        gotoxy(10,25);printf("按任意键返回");
                    getch();
                }
        }
}
怎么改动 void newfile让创建文件能往下操作。在tc中!




上一篇:程序服务启动(有偿)
下一篇:Win32、MFC、数据库、Linux、嵌入式、数据结构、传智播客、潭州、STL、Opencv、算...

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /1 下一条

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-11-16 12:21

Powered by Discuz! X3.4

© 2009-2018 cctry.com

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