| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 472 人关注过本帖
标题:学生管理系统
只看楼主 加入收藏
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
结帖率:91.43%
收藏
已结贴  问题点数:20 回复次数:2 
学生管理系统
程序代码:
#include<stdio.h>
#include<stdlib.h>
struct student
{
    int num;
    int age;
    int grade;
    char name[20];
    char major[20];
    char sex[8];

};

//void init_(FILE *fp);//初始化
void init_table1(void);
void init_table2(void);
void check_(FILE *fp,int n);//查询
void check(FILE *fp);//查询
void add_(FILE *fp);//增加成员
void delete_(FILE *fp);//注销、删除成员  用学号来注销
void modif_(FILE *fp);//修改成员信息
void content(FILE *fp);//查看目录
int main()
{
    FILE *fp;
    int n;
    errno_t err;
    err=fopen_s(&fp,"data","rb+");
    if(err!=0)
    {
        printf("error\n");
        exit(1);
    }
    else
        printf("        欢迎来到学生管理系统\n\n made by 卡桑\n");
//    init_(fp);
    init_table1();
    while(1)
    {
        printf("请选择选项:");
        if(scanf("%d",&n)!=1)
            printf("非法输入,请按要求输入\n\n");
        else
            switch (n)
            {
            case 0: fclose(fp);    system("pause");return 0;//退出
            case 1: add_(fp);break;//录入
            case 2: content(fp);break;//浏览
            case 3: check(fp);break;//查询
            case 4: delete_(fp);break;//删除
            case 5: modif_(fp);break;//修改
            default : printf("非法输入,请按要求输入\n\n");break;
            }
        init_table1();
    }
    fclose(fp);

    return 0;
}
/*
void init_(FILE *fp)//初始化
{
    errno_t err;
    err=fopen_s(&fp,"data","ab+");
    if(err==0)
    {
        printf("error\n");
        exit(1);
    }
    else
        printf("欢迎来到学生管理系统\n\n made by 卡桑\n\n\n");
}
*/
void init_table1(void)
{
    printf("\n--------------------------------\n");
    printf("              主菜单              ");
    printf("\n--------------------------------\n");
    printf("    [1]----录入学生信息       \n");
    printf("    [2]----浏览学生信息       \n");
    printf("    [3]----查询学生信息       \n");
    printf("    [4]----删除学生信息       \n");
    printf("    [5]----修改学生信息       \n");
    printf("    [0]----退出系统           \n");
    printf("--------------------------------\n\n");
}

void init_table2(void)
{
    printf("\n--------------------------------\n");
    printf("       1----修改学生姓名       \n");
    printf("       2----修改学生学号       \n");
    printf("       3----修改学生性别       \n");
    printf("       4----修改学生年龄       \n");
    printf("       5----修改学生年级       \n");
    printf("       6----修改学生专业       \n");
    printf("       0----退    出            \n");
    printf("--------------------------------\n\n");
}

void check(FILE *fp)
{
    int temp;
    printf("\n\n");
    printf("请输入要查询的学号:");
    scanf("%d",&temp);
    printf("\n");
    check_(fp,temp);
    printf("\n\n");
}

void check_(FILE *fp,int n)//检查 用学号  c++可以写重载函数,用学号和姓名  有该人流返回该人的位置,否则回到最前面
{
    struct student *temp;
    temp=(struct student *)malloc(sizeof(student));
    fseek(fp,0L,SEEK_SET);
    while(fread(temp,sizeof(student),1,fp)==1);//读一个人,若还有的话,没有则跳出
    {
        if(temp->num==n)
        {
            printf("姓名:%s\n学号:%d\n性别:%s\n年龄:%d\n年级:%d\n专业:%s\n",temp->name,temp->num,temp->sex,temp->age,temp->grade,temp->major);
            free(temp);
            fseek(fp,-sizeof(student),SEEK_CUR);
            return ;
        }
    }
    printf("你所查找的人不在档案");
    fseek(fp,0L,SEEK_SET);
    free(temp);
//    return 0;
}

void add_(FILE *fp)//增加成员
{
    struct student  *add_new;
    add_new=(struct student *)malloc(sizeof(student));
    printf("\n\n");
    printf("请输入姓名:");
    scanf("%s",add_new->name);
    printf("请输入学号:");
    scanf("%d",&(add_new->num));
    printf("请输入性别:");
    scanf("%s",add_new->sex);
    printf("请输入年龄:");
    scanf("%d",&(add_new->age));
    printf("请输入年级:");
    scanf("%d",&(add_new->grade));
    printf("请输入专业:");
    scanf("%s",add_new->major);

    //以后改成有检错重新输入的

    fseek(fp,0L,SEEK_END);
    fwrite(add_new,sizeof(student),1,fp);
    fseek(fp,0L,SEEK_SET);
    free(add_new);
    printf("\n");
}

void delete_(FILE *fp)//注销、删除成员  用学号来注销
{
    //暂时没想到好方法,目前知道的就是把后面的都先存起来,往前面盖上去
    printf("\n sorry,暂无此功能!\n\n");
}

void modif_(FILE *fp)//修改成员信息
{
    struct student *temp;
    int n,m,l=0;
    temp=(struct student *)malloc(sizeof(student));
    fread(temp,sizeof(student),1,fp);
    fseek(fp,-sizeof(student),SEEK_CUR);
    
    printf("\n修改对象基本信息:\n");
    printf("姓名:%s\n学号:%d\n性别:%s\n年龄:%d\n年级:%d\n专业:%s\n",temp->name,temp->num,temp->sex,temp->age,temp->grade,temp->major);
    init_table2();
    while(1)
    {
        m=scanf("%d",&n);
        if(m!=1)
            break;
        switch(n)
        {
        case 1:l=0;printf("请输入新的姓名:");scanf("%s",temp->name);break;            //姓名
        case 2:l=0;printf("请输入新的学号:");scanf("%d",&(temp->num));break;        //学号
        case 3:l=0;printf("请输入新的性别:");scanf("%s",temp->sex);break;            //性别
        case 4:l=0;printf("请输入新的年龄:");scanf("%d",&(temp->age));break;        //年龄
        case 5:l=0;printf("请输入新的年级:");scanf("%d",&(temp->grade));break;    //年级
        case 6:l=0;printf("请输入新的专业:");scanf("%s",temp->major);break;        //专业
//        case 0:l=0;break;
        default:l=1;break;
        }
        if(l)
            break;
        init_table2();
    }
    printf("姓名:%s\n学号:%d\n性别:%s\n年龄:%d\n年级:%d\n专业:%s\n",temp->name,temp->num,temp->sex,temp->age,temp->grade,temp->major);

    fwrite(temp,sizeof(student),1,fp);
    fseek(fp,0L,SEEK_SET);
    free(temp);

}

void content(FILE *fp)
{
    
    struct student *temp;
    int i=0;
    temp=(struct student *)malloc(sizeof(student));
    fseek(fp,0L,SEEK_SET);
    printf("\n");
    while(fread(temp,sizeof(student),1,fp)==1)//如果有数据的话
        printf("%d   姓名:%s   学号:%d\n",++i,temp->name,temp->num);
    if(i==0)
        printf("学生档案为空!!!\n");
    free(temp);
    fseek(fp,0L,SEEK_SET);
    printf("\n");
}

想请教一下,这个完成以后,下一个应该写什么东西
搜索更多相关主题的帖子: 管理系统 
2015-08-22 15:39
文江
Rank: 2
等 级:论坛游民
帖 子:77
专家分:20
注 册:2015-8-17
收藏
得分:14 
include"string"  
  
/*定义学生结构体*/  
  
struct Student  
  
{  
  
     char ID[20];  
  
     char Name[20];  
  
     float Mark1;  
  
     float Mark2;  
  
     float Mark3;  
  
     float Average;  
  
};  
  
  
/*声明学生数组及学生数量*/  
  
struct Student students[1000];  
  
int num=0;  
  
   
  
/*求平均值*/  
  
float Avg(struct Student stu)  
  
{  
  
     return (stu.Mark1+stu.Mark2+stu.Mark3)/3;  
  
}  
  
   
  
/*通过学号返回数组下标*/  
  
int Student_SearchByIndex(char id[])  
  
{  
  
     int i;  
  
     for (i=0;i<num;i++)  
  
     {  
  
         if (strcmp(students[i].ID,id)==0)  
  
         {  
  
              return i;  
  
         }  
  
     }  
  
     return -1;  
  
}  
  
   
  
/*通过姓名返回数组下标*/  
  
int Student_SearchByName(char name[])  
  
{  
  
     int i;  
  
     for (i=0;i<num;i++)  
  
     {  
  
         if (strcmp(students[i].Name,name)==0)  
  
         {  
  
              return i;  
  
         }  
  
     }  
  
     return -1;  
  
}  
  
   
  
/*显示单条学生记录*/  
  
void Student_DisplaySingle(int index)  
  
{  
  
     printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","成绩","成绩","成绩","平均成绩");  
  
     printf("-------------------------------------------------------------\n");  
  
     printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[index].ID,students[index].Name,  
  
              students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Average);  
  
}  
  
   
  
/*插入学生信息*/  
  
void Student_Insert()  
  
{  
  
     while(1)  
  
     {  
  
         printf("请输入学号:");  
  
         scanf("%s",&students[num].ID);  
  
         getchar();  
  
   
  
         printf("请输入姓名:");  
  
         scanf("%s",&students[num].Name);  
  
         getchar();  
  
   
  
         printf("请输入成绩:");  
  
         scanf("%f",&students[num].Mark1);  
  
         getchar();  
  
   
  
         printf("请输入成绩:");  
  
         scanf("%f",&students[num].Mark2);  
  
         getchar();  
  
   
  
         printf("请输入成绩:");  
  
         scanf("%f",&students[num].Mark3);  
  
         getchar();  
  
   
  
         students[num].Average=Avg(students[num]);  
  
         num++;  
  
   
  
         printf("是否继续?(y/n)");  
  
         if (getchar()=='n')  
  
         {  
  
              break;  
  
         }  
  
     }  
  
   
  
}  
  
   
  
/*修改学生信息*/  
  
void Student_Modify()  
  
{  
  
     //float mark1,mark2,mark3;  
  
     while(1)  
  
     {  
  
         char id[20];  
  
         int index;  
  
         printf("请输入要修改的学生的学号:");  
  
         scanf("%s",&id);  
  
         getchar();  
  
         index=Student_SearchByIndex(id);  
  
         if (index==-1)  
  
         {  
  
              printf("学生不存在!\n");  
  
         }  
  
         else  
  
         {  
  
              printf("你要修改的学生信息为:\n");  
  
              Student_DisplaySingle(index);  
  
              printf("-- 请输入新值--\n");  
  
  
              printf("请输入学号:");  
  
              scanf("%s",&students[index].ID);  
  
              getchar();  
  
  
              printf("请输入姓名:");  
  
              scanf("%s",&students[index].Name);  
  
              getchar();  
  
  
              printf("请输入成绩:");  
  
              scanf("%f",&students[index].Mark1);  
  
              getchar();  
  
  
              printf("请输入成绩:");  
  
              scanf("%f",&students[index].Mark2);  
  
              getchar();  
  
  
              printf("请输入成绩:");  
  
              scanf("%f",&students[index].Mark3);  
  
              getchar();  
  
  
              students[index].Average=Avg(students[index]);  
  
         }  
  
         printf("是否继续?(y/n)");  
  
         if (getchar()=='n')  
  
         {  
  
              break;  
  
         }  
  
     }  
  
}  
  
   
  
/*删除学生信息*/  
  
void Student_Delete()  
  
{  
  
     int i;  
  
     while(1)  
  
     {  
  
         char id[20];  
  
         int index;  
  
         printf("请输入要删除的学生的学号:");  
  
         scanf("%s",&id);  
  
         getchar();  
  
         index=Student_SearchByIndex(id);  
  
         if (index==-1)  
  
         {  
  
              printf("学生不存在!\n");  
  
         }  
  
         else  
  
         {  
  
              printf("你要删除的学生信息为:\n");  
  
              Student_DisplaySingle(index);  
  
              printf("是否真的要删除?(y/n)");  
  
              if (getchar()=='y')  
  
              {  
  
                   for (i=index;i<num-1;i++)  
  
                   {  
  
                       students[i]=students[i+1];//把后边的对象都向前移动  
  
                   }  
  
                   num--;  
  
              }  
  
              getchar();  
  
         }  
  
         printf("是否继续?(y/n)");  
  
         if (getchar()=='n')  
  
         {  
  
              break;  
  
         }  
  
     }  
  
}  
  
   
  
/*按姓名查询*/  
  
void Student_Select()  
  
{  
  
     while(1)  
  
     {  
  
         char name[20];  
  
         int index;  
  
         printf("请输入要查询的学生的姓名:");  
  
         scanf("%s",&name);  
  
         getchar();  
  
         index=Student_SearchByName(name);  
  
         if (index==-1)  
  
         {  
  
              printf("学生不存在!\n");  
  
         }  
  
         else  
  
         {  
  
              printf("你要查询的学生信息为:\n");  
  
              Student_DisplaySingle(index);  
  
         }  
  
         printf("是否继续?(y/n)");  
  
         if (getchar()=='n')  
  
         {  
  
              break;  
  
         }  
  
     }  
  
}  
  
   
  
/*按平均值排序*/  
  
void Student_SortByAverage()  
  
{  
  
     int i,j;  
  
     struct Student tmp;  
  
     for (i=0;i<num;i++)  
  
     {  
  
         for (j=1;j<num-i;j++)  
  
         {  
  
              if (students[j-1].Average<students[j].Average)  
  
              {  
  
                   tmp=students[j-1];  
  
                   students[j-1]=students[j];  
  
                   students[j]=tmp;  
  
              }  
  
         }  
  
     }  
  
}  
  
   
  
/*显示学生信息*/  
  
void Student_Display()  
  
{  
  
     int i;  
  
     printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","成绩","成绩","成绩","平均成绩");  
  
     printf("-------------------------------------------------------------\n");  
  
     for (i=0;i<num;i++)  
  
     {  
  
         printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[i].ID,students[i].Name,  
  
              students[i].Mark1,students[i].Mark2,students[i].Mark3,students[i].Average);  
  
     }  
  
}  
  
   
  
/*将学生信息从文件读出*/  
  
void IO_ReadInfo()  
  
{  
  
     FILE *fp;  
  
     int i;  
  
     if ((fp=fopen("Database.txt","rb"))==NULL)  
  
     {  
  
         printf("不能打开文件!\n");  
  
         return;  
  
     }  
  
     if (fread(&num,sizeof(int),1,fp)!=1)  
  
     {  
  
         num=-1;  
  
     }  
  
     else  
  
     {  
  
         for(i=0;i<num;i++)  
  
         {  
  
              fread(&students[i],sizeof(struct Student),1,fp);  
  
         }  
  
     }  
  
     fclose(fp);  
  
}  
  
   
  
/*将学生信息写入文件*/  
  
void IO_WriteInfo()  
  
{  
  
     FILE *fp;  
  
     int i;  
  
     if ((fp=fopen("Database.txt","wb"))==NULL)  
  
     {  
  
         printf("不能打开文件!\n");  
  
         return;  
  
     }  
  
     if (fwrite(&num,sizeof(int),1,fp)!=1)  
  
     {  
  
         printf("写入文件错误!\n");  
  
     }  
  
     for (i=0;i<num;i++)  
  
     {  
  
         if (fwrite(&students[i],sizeof(struct Student),1,fp)!=1)  
  
         {  
  
              printf("写入文件错误!\n");  
  
         }  
  
     }      
  
     fclose(fp);  
  
}  
  
   
  
   
  
/*主程序*/  
  
void main()  
  
{  
  
     int choice;  
  
     IO_ReadInfo();  
  
     while(1)  
  
     {  
  
         /*主菜单*/  
  
         printf("\n------ 学生成绩管理系统------\n");  
  
         printf("1. 增加学生记录\n");  
  
         printf("2. 修改学生记录\n");  
  
         printf("3. 删除学生记录\n");  
  
         printf("4. 按姓名查询学生记录\n");  
  
         printf("5. 按平均成绩排序\n");  
  
         printf("6. 退出\n");  
  
         printf("请选择(1-6):");  
  
         scanf("%d",&choice);  
  
         getchar();  
  
         switch(choice)  
  
         {  
  
         case 1:  
  
              Student_Insert();  
  
              break;  
  
         case 2:  
  
              Student_Modify();  
  
              break;  
  
         case 3:  
  
              Student_Delete();  
  
              break;  
  
         case 4:  
  
              Student_Select();  
  
              break;  
  
         case 5:  
  
              Student_SortByAverage();  
  
              Student_Display();  
  
              break;  
  
         case 6:  
  
              exit(0);  
  
              break;  
  
         }  
  
         IO_WriteInfo();  
  
     }  
  
}  
</span>
2015-08-22 19:37
文江
Rank: 2
等 级:论坛游民
帖 子:77
专家分:20
注 册:2015-8-17
收藏
得分:0 
不知道对不对
2015-08-22 19:37
快速回复:学生管理系统
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018031 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved