今天没事花了几个小时写了个C语言的结构体数组的简单管理系统,可以读写文件。希望可以帮助一些搞课设的同学。我记得我当时搞课设搞的挺痛苦的。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//函数声明 
int number=4;
void menu();
void show(struct student a[]);
void Delete(struct student a[],char xuehao[20]);
void add(struct student a[]);
void pingjun(struct student a[]);
void search(struct student a[],char string[20]);
void rank(struct student a[]);

//结构体数组 
struct student
{
    char name[20];
    char xuehao[20];
    int yuwen;
    int yingyu;
    int shuxue;
}student1[100];
/*={"李定国","晋王",78,99,100,
"刘裕","高祖" , 100  , 100 ,  100,
"刘义隆" ,"太祖" , 89,    74 ,   23,
"刘秀", "世祖"  , 100,   100 ,  100};*/

void save(struct student a[])
{
    FILE *fp;
    int i;
    if((fp=fopen("student.txt","wb"))==NULL)
    {
        printf("cannot open file\n");
        return;
    }
    for(i=0;i<number;i++)
    {
        if(fwrite(&a[i],sizeof(struct student),1,fp)!=1)
        printf("file write error\n");
    }
    fclose(fp);
}
void read(struct student a[])
{
    FILE *fp;
    int i;
    if((fp=fopen("student.txt","rb"))==NULL)
    {
        printf("cannot open file\n");
        return;
    }
    for(i=0;i<number;i++)
    {
        fread(&a[i],sizeof(struct student),1,fp);
        printf("%-7s",a[i].name);
         printf("%-6s",a[i].xuehao);
         printf("%-6d",a[i].yuwen);
         printf("%-6d",a[i].yingyu);
         printf("%-5d",a[i].shuxue);
         printf("\n");
    }
    fclose(fp);
}
//主函数 
int main()
{
    FILE *fp;
    int i;
    if((fp=fopen("student.txt","rb"))==NULL)
    {
        printf("cannot open file\n");
    }
    for(i=0;i<number;i++)
    fread(&student1[i],sizeof(struct student),1,fp);//先把文件里面的东西读到结构体数组中 
    menu();
    return 0;

//完整函数 
 void menu()
 {
     int i;char string[20];
     printf("请输入选项:\n");
     printf("1:显示学生所有信息\n");
     printf("2:按学号删除学生\n");
     printf("3:添加学生\n");
     printf("4:求各科平均分\n");
     printf("5:按学号查询学生信息\n");
     printf("6:按语文成绩排序\n");
     scanf("%d",&i);
     switch(i)
     {
         case 1:show(student1);break;
         case 2:Delete(student1,string);break;
         case 3:add(student1);break;
         case 4:pingjun(student1);break;
         case 5:search(student1,string);break;
         case 6:rank(student1);break;
     }
     
 }
 
 
 
 
 void show(struct student a[])
 {    
    int q;
     printf("姓名   学号  语文  英语  数学\n");
     read(a);
     printf("输入0返回菜单");
     scanf("%d",&q);
     if(q==0)
     {
     system("cls") ;//清屏函数
     menu();
     }
    
 }
 
 
 
 void Delete(struct student a[],char string[20])
 {
     int q;
     scanf("%s",string);
     for(int i=0;i<number;i++)
     {
         if(strcmp(string,a[i].xuehao)==0)
         {
             for(int j=i;j<=number;j++)
             {
                 a[j]=a[j+1];
             }
         }
     }
     save(a);
     number--;
     printf("删除成功");
    printf("\n");
    printf("输入0返回菜单");
    scanf("%d",&q);
     if(q==0)
     {
     system("cls") ;//清屏函数
     menu();
     }
 }
 
 
 void add(struct student a[])
 {
     int q;
     scanf("%s",a[number].name);
     scanf("%s",a[number].xuehao);
     scanf("%d",&a[number].yuwen);
     scanf("%d",&a[number].yingyu);
     scanf("%d",&a[number].shuxue);
     save(a);
    number++;
    printf("添加完成");
    printf("\n");
    printf("输入0返回菜单");
    scanf("%d",&q);
     if(q==0)
     {
     system("cls") ;//清屏函数
     menu();
     }
 }
 
 
 
 void pingjun(struct student a[])
 {
     int q;
     float yuwen1=0,shuxue1=0,yingyu1=0;
     for(int i=0;i<number;i++)
     {
         yuwen1+=a[i].yuwen;
         shuxue1+=a[i].shuxue;
         yingyu1+=a[i].yingyu;
     }
     printf("语文平均分为:%f\n",yuwen1/number);
     printf("英语平均分为:%f\n",yingyu1/number);
     printf("数学平均分为:%f\n",shuxue1/number);
    printf("输入0返回菜单");
     scanf("%d",&q);
     if(q==0)
     {
     system("cls") ;//清屏函数
     menu();
     }
 }
 
  void search(struct student a[],char string[20])
 {
     int q;
     scanf("%s",string);
     for(int i=0;i<number;i++)
     {
         if(strcmp(string,a[i].xuehao)==0)
         {
                 printf("姓名   学号  语文  英语  数学\n");
                 printf("%-7s",a[i].name);
                 printf("%-6s",a[i].xuehao);
                 printf("%-6d",a[i].yuwen);
                 printf("%-6d",a[i].yingyu);
                 printf("%-5d",a[i].shuxue);
                 printf("\n");
         }
     }
     printf("输入0返回菜单");
     scanf("%d",&q);
     if(q==0)
     {
     system("cls") ;//清屏函数
     menu();
     }
     
 }
 
 
void rank(struct student a[])
{
    struct student temp;
    for(int i=0;i<number-1;i++)
    {
        for(int j=0;j<number-1-i;j++)
        {
            if(a[j].yuwen>a[j+1].yuwen)
            {
                
                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
            
        }
    }
    save(a);
    show(a);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值