| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 421 人关注过本帖
标题:一道C语言题目 学生管理系统,求指导啊 谢谢了
只看楼主 加入收藏
fred1653
Rank: 1
来 自:黑龙江
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-2-23
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
一道C语言题目 学生管理系统,求指导啊 谢谢了
这就是那个程序的代码,排序那里总是错误的。。
4-写入二进制文件程序.rar (1.15 KB)

  这个是那个二进制文件生成的代码。

程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define N 30

FILE *fp;
int pd=0;


struct Student
{
    int num;
    char name[20];
    int bj;
    char sex[2];
    char bir[20];
    double grade;
}stu[N],temp;

typedef struct Student SJ;


/****************************4删除函数****************************/
void namedel(SJ stu[N])
{
    int i;
    char namedel[20],a;
    putchar(10);
    printf("请输入您要删除的姓名: ");
    scanf("%s",namedel);
    for(i=0;i<N;i++)
        if(strcmp(namedel,stu[i].name)==0)
        {
            printf("已找到如下内容:\n");
            printf("学号:%d  姓名:%s 班级:%d 性别:%s 生日:%s 成绩:%2.1lf \n\n",stu[i].num,stu[i].name,stu[i].bj,stu[i].sex,stu[i].bir,stu[i].grade);
            putchar(10);
            printf("确认删除? Y or N  \? 请输入:");
            scanf("%c",&a);
            if(a=='y' || a== 'Y')
            {
                memset(&stu[i],0x00,sizeof(SJ));
                putchar(10);
                printf("已删除!\n");
            }
        }
}

void numdel(SJ stu[N])
{
    int numdel,i;
    char a;
    printf("请输入您要删除的同学学号:  ");
    scanf("%d",&numdel);
    putchar(10);
    printf("查找中!\n\n\n");
    for(i=0;i<N;i++)
         if(numdel==stu[i].num)
        {
            printf("\t已找到如下内容:\n");
            printf("学号:%d  姓名:%s 班级:%d 性别:%s 生日:%s 成绩:%2.1lf \n\n",stu[i].num,stu[i].name,stu[i].bj,stu[i].sex,stu[i].bir,stu[i].grade);
            putchar(10);
            printf("确认删除? Y or N  ? 请输入:");
            scanf("%c",&a);
            if(a=='y' || a== 'Y')
            {
                memset(&stu[i],0x00,sizeof(SJ));
                putchar(10);
                printf("已删除!\n");
            }
        }

}
void del(SJ stu[N])
{
    int i,k;
    if((fp=fopen("stu.dat","wb+"))==NULL)
    {
        printf("无法打开文件!\n");
        exit(0);
    }
    i=0;
    fread(&stu[i],sizeof(SJ),1,fp);
    while(!feof(fp))
    {
        i++;
        fread(&stu[i],sizeof(SJ),1,fp);
    }
    printf("欢迎使用删除功能!\n");
    printf("*******************************\n");
    printf("\t1、按照姓名删除内容。\n");
    printf("\t2、按照学号删除内容。\n");
    printf("*******************************\n");
    printf("请输入您的选项: ");
    scanf("%d",&k);
    switch(k)
    {
    case 1:
        namedel(stu);
        break;
    case 2:
        numdel(stu);
        break;
    }
    for(i=0;i<N;i++)
        fwrite(&stu[i],sizeof(SJ),1,fp);    
    fclose(fp);
}

/****************************3插入函数****************************/

void insert(SJ stu[N])
{
    int i,j,k=1;
    if((fp=fopen("stu.dat","wb+"))==NULL)
    {
        printf("无法打开文件!\n");
        exit(0);
    }
    i=0;
    fread(&stu[i],sizeof(SJ),1,fp);
    while(!feof(fp))
    {
        i++;
        fread(&stu[i],sizeof(SJ),1,fp);
    }
    k=i;
    for(j=0;j<N-1;j++)
        for(i=0;i<N-1-j;i++)
            if((stu[i].grade-stu[i+1].num)<1e-6)
            {
                memcpy(&temp,&stu[i],sizeof(SJ));
                memcpy(&stu[i],&stu[i+1],sizeof(SJ));
                memcpy(&stu[i+1],&temp,sizeof(SJ));
            }
    printf("排序已完成,现在插入学生信息了。\n\n");
    printf("请输入学号: ");
    scanf("%d",&temp.num);
    printf("请输入姓名: ");
    scanf("%s",temp.name);
    printf("请输入班级:(一班请输入1)");
    scanf("%d",&temp.bj);
    printf("请输入性别(M OR F)");
    scanf("%s",temp.sex);
    printf("请输入生日(如1992-1-1)");
    scanf("%s",temp.bir);
    printf("请输入成绩:  ");
    scanf("%lf",&temp.grade);
    for(i=0;i<=k;i++)
    {
        if(temp.num<stu[i].num)
        {
            for(j=k;j<i;j--)
            memcpy(&stu[j],&stu[j-1],sizeof(SJ));
            memcpy(&stu[i],&temp,sizeof(SJ));
        }
        else
            memcpy(&stu[k],&temp,sizeof(SJ));
    }
    printf("已经成功插入!\n");
    for(i=0;i<k;i++)
        if(fwrite(&stu[i],sizeof(SJ),1,fp)!=1)
        {
            printf("对不起,无法写入文件!\n");
            exit(0);
        }
    fclose(fp);
}
/********************排序函数****************/
void sort(SJ stu[N])
{
    int i,j;
    if((fp=fopen("stu.dat","w+"))==NULL)
    {
        printf("无法打开文件!\n");
        exit(0);
    }
    i=0;
    fread(&stu[i],sizeof(SJ),1,fp);
    while(!feof(fp))
    {
        i++;
        fread(&stu[i],sizeof(SJ),1,fp);
    }
    for(j=0;j<N-1;j++)
        for(i=0;i<N-1-j;i++)
            if((stu[i].grade-stu[i+1].num)<1e-6)
            {
                memcpy(&temp,&stu[i],sizeof(SJ));
                memcpy(&stu[i],&stu[i+1],sizeof(SJ));
                memcpy(&stu[i+1],&temp,sizeof(SJ));
            }
    printf("排序完成!\n");
    for(i=0;i<N;i++)
        fwrite(&stu[i],sizeof(SJ),1,fp);
    fclose(fp);

}
/*************查询函数***********************/
void searchname(SJ stu[N]) //姓名查询
{
    int i;
    char name1[20];
    printf("请输入姓名:");
    scanf("%s",name1);
    for(i=0;i<20;)
    {
        fread(&stu[i],sizeof(SJ),1,fp);
        if(strcmp(name1,stu[i].name)==0)
        {
            pd=1;
            printf("学号:%d  姓名:%s 班级:%d 性别:%s 生日:%s 成绩:%2.1lf \n\n",stu[i].num,stu[i].name,stu[i].bj,stu[i].sex,stu[i].bir,stu[i].grade);
            putchar(10);
        }
        while(!feof(fp))
        {
            i++;
            if(strcmp(name1,stu[i].name)==0)
            {
                pd=1;
                printf("学号:%d  姓名:%s 班级:%d 性别:%s 生日:%s 成绩:%2.1lf \n\n",stu[i].num,stu[i].name,stu[i].bj,stu[i].sex,stu[i].bir,stu[i].grade);
                putchar(10);
            }
        }
        if(pd==0)
            printf("对不起,没有找到您要的信息!\n");

    }
}
void searchnum(SJ stu[N]) //学号
{
    int i,number;
    printf("请输入您要查找的学号: ");
    scanf("%d",&number);
    fclose(fp);
    sort(stu);
    if((fp=fopen("stu.dat","rb"))==NULL)
    {
        printf("无法打开文件!");
        exit(0);
    }
    i=0;
    fread(&stu[i],sizeof(SJ),1,fp);
    while(!feof(fp))
    {
        i++;
        fread(&stu[i],sizeof(SJ),1,fp);
    }
    for(i=0;i<N;i++)
    {
        if(stu[i].num==number)
        {    
            pd=1;
            printf("找到信息如下:\n");
            printf("学号:%d  姓名:%s 班级:%d 性别:%s 生日:%s 成绩:%2.1lf \n\n",stu[i].num,stu[i].name,stu[i].bj,stu[i].sex,stu[i].bir,stu[i].grade);
        }
    }
    if(pd==0)
        printf("没有找到任何信息!\n");


}
void searchgrade(SJ stu[N]) //成绩查询
{
    int i;
    double search;
    printf("请输入成绩:");
    scanf("%lf",&search);
    for(i=0;i<20;)
    {
        fread(&stu[i],sizeof(SJ),1,fp);
        if((search-stu[i].grade)>=1e-10)
        {
            pd=1;
            printf("学号:%d  姓名:%s 班级:%d 性别:%s 生日:%s 成绩:%2.1lf \n\n",stu[i].num,stu[i].name,stu[i].bj,stu[i].sex,stu[i].bir,stu[i].grade);
            putchar(10);
        }
        while(!feof(fp))
        {
            i++;
            fread(&stu[i],sizeof(SJ),1,fp);
            if((search-stu[i].grade)>=1e-10)
            {
                pd=1;
                printf("学号:%d  姓名:%s 班级:%d 性别:%s 生日:%s 成绩:%2.1lf \n\n",stu[i].num,stu[i].name,stu[i].bj,stu[i].sex,stu[i].bir,stu[i].grade);
                putchar(10);
            }
        }
        if(pd==0)
            printf("对不起,没有找到您要的信息!\n");

    }
}



/**************菜  单*****************/
void menu1(SJ stu[N])
{
    int b;
    if((fp=fopen("stu.dat","rb"))==NULL)
    {
        printf("无法打开文件!");
        exit(0);
    }
    printf("****************************************\n");
    printf("\t1----------按学号查询\n");
    printf("\t2----------按姓名查询\n");
    printf("\t3----------按成绩查询\n");
    printf("****************************************\n");
    putchar(10);
    printf("\t请输入: ");
    scanf("%d",&b);
    switch(b)
    {
    case 1:
        searchnum(stu); 
        break;
    case 2:
        searchname(stu);
        break;
    case 3:
        searchgrade(stu);
        break;
    }
    fclose(fp);
}
int menu(void)
{
    int i;
    printf("欢迎使用学生管理系统\n");
    printf("****************************************\n");
    printf("1--------------查询\n");
    printf("2--------------排序\n");
    printf("3--------------插入\n");
    printf("4--------------删除\n");
    printf("5--------------退出\n");
    printf("****************************************\n");
    putchar(10);
    printf("\t请输入:");
    scanf("%d",&i);
    return i;
}


void main()
{
    int a=0,b=0;
    char c;
    do
    {
        a=menu();
        switch(a)
        {
        case 1:menu1(stu);break;
        case 2:sort(stu);break;
        case 3:insert(stu);break;
        case 4:del(stu);break;
        case 5:break;
        }
        printf("\n\t还要继续吗?(Y/N)");
        do
        {
            c=getche();
            putchar(10);
        }while(c!='Y' && c!='y' && c!='N' && c!='n');
    }while(c== 'y' || c == 'Y');
    putchar(10);
    printf("程序结束!\n");
}

搜索更多相关主题的帖子: C语言 学生 管理系统 
2011-07-04 21:51
jklyy007
Rank: 1
等 级:新手上路
帖 子:3
专家分:9
注 册:2011-6-30
收藏
得分:7 
真有毅力写写下来啊。。。。。。
2011-07-05 09:59
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:7 

My life is brilliant
2011-07-05 11:08
fred1653
Rank: 1
来 自:黑龙江
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-2-23
收藏
得分:0 
以下是引用jklyy007在2011-7-5 09:59:15的发言:

真有毅力写写下来啊。。。。。。

  不写回不了家。。
2011-07-05 16:02
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:7 
那写错了能回家不

                                         
===========深入<----------------->浅出============
2011-07-06 09:49
快速回复:一道C语言题目 学生管理系统,求指导啊 谢谢了
数据加载中...
 
   



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

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