12C-语言程序设计

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
#include<conio.h>
#define H "--------------------------------------------------------------------------\n"
#define H1 "|   学号    |  姓名   |   班级   |c语言  |数学   | 英语  | 总成绩 |\n"
#define H2 "|-----------|---------|----------|-------|-------|-------|--------|\n"
#define H3 "|---------------------|----------|-------|-------|-------|--------|--------|\n"
using namespace std;
struct student
{
char name[20];//姓名
char num[20]; //学号
char cla[20]; //班级
double sum; //总成绩
double math;
double english;
double c_sno;
}students[500];
bool Pudan(int num)
{
    if(num>=0&&num<=100)
        return true;
       return false;
}
bool cmp(student s1,student s2)  //总成绩比较
{
return s1.sum>s2.sum;
}
int Sort(int cmd)  //成绩比较函数
{
student stu;
FILE *fp=fopen("D:\\inform.txt","ab+");
int n,cnt=0;
while((n=fread(&stu,sizeof(stu),1,fp)>0))
{
students[cnt++]=stu;
}
fclose(fp);
sort(students,students+cnt,cmp);
return cnt;
}
void help()
{
    puts("本系统为简单的成绩管理系统,按(0~6)分别执行相应功能");
    printf("\t\t按0返回主菜单:");


}
void menu()//菜单选择函数
{
   printf("\n\n\n\n       <><><><><>  欢 迎 来 到 学 生 成 绩 管 理 系统  <><><><><>\n\n");
        printf("                * * * * * * * * * * * * * * * * * * * *\n");
        printf("                *           * * * * * * * * *         *\n");
        printf("                *     1---> * 录 入 成 绩   *         *\n");
        printf("                *           * * * * * * * * *         *\n");
        printf("                *           * * * * * * * * *         *\n");
        printf("                *     2---> * 学生成绩查询  *         *\n");
        printf("                *           * * * * * * * * *         *\n");
        printf("                *           * * * * * * * * *         *\n");
        printf("                *     3---> * 学生成绩显示  *         *\n");
        printf("                *           * * * * * * * * *         *\n");
        printf("                *           * * * * * * * * *         *\n");
        printf("                *     4---> * 学生成绩修改  *         *\n");
        printf("                *           * * * * * * * * *         *\n");
        printf("                *           * * * * * * * * *         *\n");
        printf("                *     5---> *学生成绩删除   *         *\n");
        printf("                *           * * * * * * * * *         *\n");
        printf("                *     6-->  Help  0-->  返回主菜单    *\n");
        printf("                * * * * * * * * * * * * * * * * * * * *\n");
        printf("\t请输入您想要使用的功能(0 - 6)");
}
void add()//信息输入函数
{
 struct student stu;
    FILE * fp;
    char ch[2];
    if((fp=fopen("D:\\inform.txt","ab"))==NULL)
    {
        printf("\tCan not open the inform file!");
        getch();
        exit(1);
    }
    do
    {getchar();
     printf("\t请输入学号:");gets(stu.num);
     printf("\t请输入姓名:");gets(stu.name);
     printf("\t请输入班级:");gets(stu.cla);
     printf("\t请按顺序输入学生的c语言成绩,数学成绩和英语成绩:");
     scanf("%lf",&stu.c_sno);
     while(Pudan(stu.c_sno)!=true)
     {
         printf("\t输入不合法,请重新输入:");
         scanf("%lf",&stu.c_sno);
     }
     scanf("%lf",&stu.math);
     while(Pudan(stu.math)!=true)
     {
         printf("\t输入不合法,请重新输入:");
         scanf("%lf",&stu.math);
     }
     scanf("%lf",&stu.english);
     while(Pudan(stu.english)!=true)
     {
         printf("\t输入不合法,请重新输入:");
         scanf("%lf",&stu.english);
     }
     stu.sum=stu.c_sno+stu.math+stu.english;
     fwrite(&stu,sizeof(stu),1,fp);
     printf("\t是否继续添加?(Y/N):");
     getchar();
     scanf("%s",ch);
    }while(ch[0]=='Y'||ch[0]=='y');
    fclose(fp);
}
void print1() //输出函数
{
   printf(H);
   printf(H1);
   printf(H2);
}
void print2(struct student stu) //输出函数
{
printf("|%-11s|%-9s|%-10s|%-7.2lf|%-7.2lf|%-7.2lf|%-8.2lf|\n",stu.num,stu.name,stu.cla,stu.c_sno,stu.math,stu.english,stu.sum);
printf(H2);
}
void x_s() //信息显示函数
{
 struct student stu;
 FILE *fp;
 int total=0;
 if((fp=fopen("D:\\inform.txt","rb"))==NULL)
 {
printf("\tCan not open the inform file!");
getch();
exit(1);


 }
 while(fread(&stu,sizeof(stu),1,fp)==1)
{
total++;
if(total==1)print1();
print2(stu);
}
puts("\t任意键继续....");
fclose(fp);
getch();
}
void Search() //信息查询函数
{
struct student stu;
FILE *fp;
int flag;
    int total=0;
char ch[10];
char f[10];
if((fp=fopen("D:\\inform.txt","rb"))==NULL)
{
    printf("\tCan not open the inform file!");
    getch();
    exit(1);
}
do
{
    rewind(fp);
    printf("请输入您想要查询的学号:"); getchar();
    gets(ch);
    total=0;
    while(fread(&stu,sizeof(stu),1,fp)==1)
    if(strcmp(ch,stu.num)==0)
    {
    total++;
    if(total==1)
    print1();
    print2(stu);
}
    printf("Search any more?(Y/N):");
    scanf("%s",f);
}while(f[0]=='Y'||f[0]=='y');
    fclose(fp);
}
void X_G()     //信息修改函数
{
struct student stu;
FILE *fp1,*fp2;
int flag;
char ch[15];
char f[10];
do
{
     if((fp1=fopen("D://inform.txt","rb"))==NULL)
     {
      printf("\tCan not open the inform file!");
      getch();
      exit(1);
     }
     if((fp2=fopen("D://temp.txt","wb"))==NULL)
     {
           printf("\tCan not creat the temp file!");
      getch();
      exit(1);
     }
     printf("请输入您想要修改信息的学号:");getchar();
     gets(ch);
     flag=0;
     while(fread(&stu,sizeof(stu),1,fp1)==1)
     {
      if(strcmp(ch,stu.num)==0)
      {
       print1();
       print2(stu); //getchar();
       printf("\n\n请输入新的信息:\n");
       printf("\t学号:");gets(stu.num);
       printf("\t姓名:");gets(stu.name);
       printf("\t班级:");gets(stu.cla);
       printf("\t请按顺序输入c语言成绩、数学成绩、英语成绩:");
       scanf("%lf%lf%lf",&stu.c_sno,&stu.math,&stu.english);
       stu.sum=stu.c_sno+stu.math+stu.english;
       getchar();
       flag=1;
     }
    fwrite(&stu,sizeof(stu),1,fp2);
}
    fclose(fp1);
    fclose(fp2);
if(flag==1)
{
printf("修改成功!\n");
remove("D://inform.txt");
rename("D://temp.txt","D://inform.txt");
}
else
printf("对不起 %>_<%,找不到这项纪录!\n");
printf("是否要继续修改?(Y/N):");
scanf("%s",f);
}while(f[0]=='Y'||f[0]=='y');
}
void Delete()         //信息删除函数
{
 struct student stu;
 FILE *fp1,*fp2;
 int flag;
 char ch[10];
 char f[10];
 do
 {
     if((fp1=fopen("D://inform.txt","rb"))==NULL)
     {
     printf("\tCan not open the inform file!");
     getch();
     exit(1);
     }
     if((fp2=fopen("D://temp.txt","wb"))==NULL)
     {
      printf("\tCan not creat the temp file!");
     getch();
     exit(1);
     }
     printf("请输入您想要删除信息的学号:");
     getchar();
     gets(ch);
     flag=0;
     while(fread(&stu,sizeof(stu),1,fp1)==1)
     {
        if(strcmp(ch,stu.num)==0)
         {
         print1();
         print2(stu);
         flag=1;
         }
         else
         fwrite(&stu,sizeof(stu),1,fp2);
         }
         fclose(fp1);
         fclose(fp2);
        if(flag==1)
        {
         printf("删除成功!\n");
         remove("D://inform.txt");
         rename("D://temp.txt","D://inform.txt");
        }
        else
        printf("Can not find this record!\n");
        printf("Delete any more?(Y/N)");
        scanf("%s",f[0]);
  }while(f[0]=='Y'||f[0]=='y');
 }
int main()
{
    system("color 0b");
    menu();
    int num;
    while(1)
    {
        while(1)
        {
        scanf("%d",&num);
        if(num<0||num>6)
        printf("输入错误,请您重新输入选项(0-6):");
        else
        break;
        }system("CLS");
        switch(num)
        {
            case 1:add();break;
            case 2:Search();break;
            case 3:x_s();break;
            case 4:X_G();break;
            case 5:Delete();break;
            case 6:help();break;
            case 0:menu();break;
        }
        if(num!=6){
        system("CLS");
        menu();
        }
    }
return 0;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值