| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 472 人关注过本帖
标题:学生管理系统
取消只看楼主 加入收藏
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
结帖率:91.43%
收藏
已结贴  问题点数:20 回复次数:0 
学生管理系统
程序代码:
#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
快速回复:学生管理系统
数据加载中...
 
   



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

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