c语言兑现的学生信息管理系统

c语言实现的学生信息管理系统
c语言兑现的学生信息管理系统

代码:


#include <stdio.h>
#include <stdlib.h>                    //用于下面的  exit(0);退出程序。
#include <string.h>                    //用于  判断是否有某个学生   利用 字符串的大小比较。
struct student                             //定义结构体 
{
                 char name[10];
                 int number;
                 char sex;
                 float score;
};                                                //莫忘“   ;   ”
void sort(struct student s[],int m)               //定义函数    按照分数排序   
{
                 int i,j,k;
                 struct student t;

                 for(i = 0;i < m - 1;i ++)                    //选择法  
                {
                                k = i;
                                 for(j = i +1;j < m;j++)
                                                 if(s[j].score > s[k].score)
                                                                k = j;
                                t = s[i];
                                s[i] = s[k];
                                s[k] = t;
                }
}
void copyFile(FILE *source,FILE *intention)                              //定义函数  文件复制  
{
                 int ch;

                 while((ch = fgetc(source)) != EOF)               //不能是while(!(ch = fgetc(source)))因为它是表示    ch != 0。而EOF 是符号常量  ,值等于 -1,......!=EOF  就是表示文件没结束。
                                fputc(ch,intention);
}
void fun0();
void fun1(struct student s[]);
void fun2(struct student s[]);
void fun3(struct student s[],int m);
void fun4();
void fun5();
void fun6();
FILE *fp;
int N;
struct student s[10000];
int main()
{
                 int choice;

                printf( "菜单选择:\n" );
                printf( "   0.初始化所有条目\n" );
                printf( "   1.增加学生信息\n" );
                printf( "   2.删除学生信息\n" );
                printf( "   3.查找学生信息\n" );
                printf( "   4.学生信息备份\n" );
                printf( "   5.删除所有信息\n" );
                printf( "   6.退出学生信息管理程序\n" );
                printf( "请输入你的选择:\n" );
                scanf( "%d",&choice);
                 switch(choice)
                {
                                 case 0:  fun0();break ;
                                 case 1:  fun1(s);break ;
                                 case 2:  fun2(s);break ;
                                 case 3:  fun3(s,N);break ;
                                 case 4:  fun4();break ;
                                 case 5:  fun5();break ;
                                 case 6:  fun6();break ;
                                 default :printf("选择错误,请输入正确的选择\n" );
                }
}
void fun0()
{
                 int i;

                printf( "输入要输学生个数N:\n" );
                scanf( "%d",&N);
                printf( "请输出各学生信息:\n" );
                 if(!( fp = fopen("c:\\stu.txt" ,"w")))               //注意“w”
                {
                                printf( "创建文件错误\n" );
                                exit(1);
                }
                 for(i = 0;i < N ;i++)
                                scanf( "%s %d %c %f",&s[i].name,&s[i].number,&s[i].sex,&s[i].score);
                sort(s,N);                                                //不能是s【N】什么的。因为它是个结构体数组。
                 for(i = 0;i < N ;i++)
                                fprintf(fp, "%s %d %c %.2f\n",s[i].name,s[i].number,s[i].sex,s[i].score);
                fclose(fp);
}
void fun1(struct student s[])
{
                 struct student addstu;
                 int i,j;

                printf( "请输入要增加学生的信息\n" );
                 if(!( fp = fopen("c:\\stu.txt" ,"a+")))                    //注意是 “ a +”。。。不能是“ a ”。。。
                {
                                printf( "打开文件错误\n" );
                                exit(1);
                }
                scanf( "%s %d %c %f",&addstu.name,&addstu.number,&addstu.sex,&addstu.score);
                 int n = 0;                         //注意文件中的数据要想使用  必须先读出来  。。。。可以这样读。。。。
                 while(fscanf(fp,"%s" ,&s[n].name) != EOF)
                {
                                fscanf(fp, "%d %c %f", &s[n].number,&s[n].sex,&s[n].score);
                                n++;
                }
                 for(i = 0;i < n;i++)                                  //为什么不能是m.
          if(addstu.score > s[i].score)
               break;
     for(j = n;j > i; j--)
          s[j] = s[j - 1];
     s[i] = addstu;   
                 fp = fopen( "c:\\stu.txt","w" );
                 for(i = 0;i < n + 1 ;i++)
                                fprintf(fp, "%s %d %c %.2f\n",s[i].name,s[i].number,s[i].sex,s[i].score);
                fclose(fp);              
}
void fun2(struct student s[])
{
                 char name[10];
                 int i,j;

                fp = fopen( "c:\\stu.txt","r+" );
                printf( "输入需要删除的学生姓名:\n" );
                scanf( "%s",name);
                 int n = 0;
                 while(fscanf(fp,"%s" ,&s[n].name) != EOF)    //不能是 (!())这样
                {
                                fscanf(fp, "%d %c %f", &s[n].number,&s[n].sex,&s[n].score);
                                n++;
                }
                 for(i = 0;i < n;i++)                                                  //这里想很久啊。。。
                                 if(strcmp(name,s[i].name) == 0)
                                                 break;
                 if(i == n)
                                printf( "无此人\n" );
                 else
                                 for(j =i ;j < n ;j++)                  //不能是j = n - 1;j <= i;j--
                                                s[j] = s[j + 1];
                fp = fopen( "c:\\stu.txt","w" );
                                 for(i = 0;i < n - 1 ;i++)
                                                fprintf(fp, "%s %d %c %.2f\n",s[i].name,s[i].number,s[i].sex,s[i].score);
                fclose(fp);              
}
void fun3(struct student s[],int m)
{
                 char name[10];
                 int i;
                
                fp = fopen( "c:\\stu.txt","r" );                    
                printf( "输入需要查找学生的姓名:\n" );
                scanf( "%s",name);
                 int n = 0;
                 while(fscanf(fp,"%s" ,&s[n].name) != EOF)
                {
                                fscanf(fp, "%d %c %f", &s[n].number,&s[n].sex,&s[n].score);
                                n++;
                }
                 for(i = 0;i < n;i++)                                                  //接下来这里想很久啊。。。
                                 if(strcmp(name,s[i].name) == 0)
                                                                 break;
                 if(i == n)
                                printf( "无此人\n" );
                 else
                                printf( "%s %d %c %.2f\n",s[i].name,s[i].number,s[i].sex,s[i].score);
}
void fun4()
{
                FILE *fp1,*fp2;

                fp1 = fopen( "c:\\stu.txt","r" );
                fp2 = fopen( "d:\\stu.txt","w" );
                copyFile(fp1,fp2);
                fclose(fp1);
                fclose(fp2);
}
void fun5()
{
                FILE *fp;
                
                 if(!(fp = fopen("c:\\stu.txt" ,"w")))               //需要时“w”或 “w+”
                {
                                printf( "打开文件错误\n" );
                                exit(0);
                };                    //打开文件一下   “w”  形式   什么都不需要写入  然后关闭就行了   就相当于清空了
                fclose(fp);
}
void fun6()
{
                exit(0);
}