标题:求助 学生信息管理系统 不能执行
只看楼主
qrjw123
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-5-30
结帖率:0
已结贴  问题点数:20 回复次数:5 
求助 学生信息管理系统 不能执行
这个题目烦了我这个新手很长时间了 求高手指导

现在的代码如下 求错误的地方

#include"stdio.h"
#include"malloc.h"
#include"stdlib.h"
#define LEN sizeof(struct student)
#define NULL 0
#define N 100

struct student//定义学生的基本信息的结构体
{
    long num    ;
    char name[20];
    char sex[4];
    int sushe;
    int phone;
   
};

struct chengji//定义学生的成绩的结构体
{
    long num;
    char bianhao[5];
    char mingcheng[30];
    int xuefen;
    int pingshi;
    int shiyan;
    int juanmian;
    float zonghe;
    float sd_xuefen;
};

struct chengji *s2=NULL;
struct student *s1;
int count=0;//输入组数计数

void mainmenu();//主界面
void readdate();//读取文件里的内容
void writedate();//向文件写入信息
void display();//查询学生信息
void shxinxi();//查询学生基本信息
void shchengji();//查询学生成绩
void record();//记录数据

int main()
{
    mainmenu();//显示主菜单
    return 0;
   
}

void mainmenu()//主菜单
{
    int choice;
    choice=-1;
    readdate();
    do
    {   
        system("cls");
        printf("\n");
        printf("\t\t------------欢迎使用此系统-----------\n");
        printf("\n\n\n");
        printf("\t\t+-----------------------------------+\n");
        printf("\t\t|          学生信息管理系统         |\n");
        printf("\t\t+-----------------------------------+\n");
        printf("\t\t|        [1]录入学生成绩            |\n");
        printf("\t\t|        [2]查询学生信息            |\n");
        printf("\t\t|        [3]删除学生信息            |\n");
        printf("\t\t|        [4]数据排序                |\n");
        printf("\t\t|        [0]退出系统                |\n");
        printf("\t\t+-----------------------------------+\n");
        printf("输入您的选择: ");
        scanf("%d",&choice);
        switch(choice)//输入不同功能编号调用相应函数来完成功能
        {
        case 0:
            exit (0);
        case 1:
            record();
            break;
        case 2:
            readdate();
            display();
            break;
        case 3:
            break;
        case 4:
            
            break;
        default:
            printf("\n无此选项!");
            break;
        }
    }
    while(choice!=0);
}

void record()//成绩输入
{
    char ch;
    struct chengji *p=s2;
    do
    {
        if(count>N-1)
        {
            printf("超过100个。");
            break;
        }
        system("cls");
        printf("请输入学生的学号:");
        scanf("%ld",&p[count].num);
        printf("请输入课程编号:");
        scanf("%s",p[count].bianhao);
        printf("请输入课程名称:");
        scanf("%d",&p[count].mingcheng);
        printf("请输入学分:");
        scanf("%d",&p[count].xuefen);
        printf("请输入平时成绩:");
        scanf("%d",&p[count].pingshi);
        printf("请输入实验成绩:");
        scanf("%d",&p[count].shiyan);
        printf("请输入卷面成绩:");
        scanf("%d",&p[count].juanmian);
        if(p[count].shiyan==-1)
            p[count].zonghe=p[count].pingshi*3/10+p[count].juanmian*7/10;
        else
            p[count].zonghe=p[count].pingshi*15/100+p[count].juanmian*7/10+p[count].shiyan*15/100;
        if(p[count].zonghe=90)
            p[count].sd_xuefen=p[count].xuefen;
        else if(p[count].sd_xuefen>=80)
            p[count].sd_xuefen=p[count].xuefen*0.8;
        else if(p[count].sd_xuefen>=70)
            p[count].sd_xuefen=p[count].xuefen*0.75;
        else if(p[count].sd_xuefen>=60)
            p[count].sd_xuefen=p[count].xuefen*0.6;
        else
            p[count].sd_xuefen=0;
        count++;
        printf("是否继续(N/Y)\n");
        ch=getchar();
        
    }while(ch=='Y'||ch=='y');
    writedate();
}


void writedate()
{
    int i;
    struct chengji *p=s2;
    FILE *fp;
    fp=fopen("chengji","w");
    if(!fp)
    {
        printf("文件打开错误。");
        return;
    }
    for(i=0;i<=count;i++)
    {
    fprintf(fp,"%ld\t%s\t%s\t%d\t%d\t%d\t%d\t%f\t%f",p[count].num,p[count].bianhao,p[count].mingcheng,p[count].xuefen,p[count].pingshi,p[count].shiyan,p[count].zonghe,p[count].sd_xuefen);
    }
    fclose(fp);
    return ;
}

void readdate()
{
    FILE *fp1,*fp2;
    struct student *p1=s1;
    struct chengji *p2=s2;
    if((fp1=fopen("student","rb"))=NULL)
    {
        printf("文件打不开\n");
        return;
    }
    else
    {
        fread(p1,sizeof(student),N,fp1);
    }
   
    if((fp2=fopen("chengji","rb"))=NULL)
    {
        printf("文件打不开\n");
        return;
    }
    else
    {
        fread(&count, sizeof(int), 1, fp2);
        fread(p2, sizeof(chengji), count, fp2);
    }


    fclose(fp1);
    fclose(fp2);
}

void display()
{
    system("cls");
    int a;
    printf("选择要查询的内容:\n1 学生基本信息\n2 学生成绩\n");
    scanf("&d",&a);
        if(a==1)
        shxinxi();
    else if(a==2)
        shchengji();
    else
        printf("请输入正确的值。");
   
}

void shxinxi()
{
    long n;
    struct student *p1;
    printf("请输入学号或宿舍号:\t");
    scanf("%ld",&n);
    p1=s1;
    while(p1=NULL)
    {
    if(p1->num==n||p1->sushe==n)
        printf("%d\t%s\t%s\t%d\t%d",p1->num,p1->name,p1->sex,p1->sushe,p1->phone);
    }
}

void shchengji()
{
    long n,i=0;float sum=0;
    struct chengji *p2;
    struct student *p1;
    p1=s1;
    p2=s2;
    printf("请输入学号;\t");
    scanf("%ld",&n);
    while(p1->num==n)
        p1++;
    printf("学  号:%d\t",n);
    printf("姓  名:%s\n",p1->name);
    while(p2=NULL)
    {
        if(p2->num==n)
        {
            printf("课程编号:%s\t课程名称:%s\t综合成绩:%d\t实得学分:%d\n",p2->bianhao,p2->mingcheng,p2->zonghe,p2->sd_xuefen);
            i++;
            sum=p2->sd_xuefen+sum;
        }
        p2++;
    }
    printf("共修:%d科,实得总学分为:%d\n",i,sum);
   
}

[ 本帖最后由 qrjw123 于 2011-6-7 12:28 编辑 ]
搜索更多相关主题的帖子: 信息 long include 结构体 
2011-06-07 12:16
qrjw123
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-5-30
得分:0 
系统功能如下:
1)系统以菜单方式工作
具有主控界面,用户按照主控界面提示选择相应的功能;

2)系统数据录入功能
对“学生成绩基本信息”文件进行数据录入,只录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据。综合成绩、学分由程序根据条件自动运算;

3)系统数据查询功能
分为学生基本情况查询和成绩查询两种
A.学生基本情况查询:
输入一个学号,可查询该生的基本信息并在屏幕上显示输出;
输入一个宿舍号码,可查询该宿舍中所有的学生的基本信息并在屏幕上显示输出;
B.成绩查询:
输入一个学号时,查询该生的所有课程情况,格式如下:
学    号:xx       姓    名:xxxxx
课程编号:xxx      课程名称:xxxxx    综合成绩:xxxx   实得学分: xx
课程编号:xxx      课程名称:xxxxx    综合成绩:xxxx   实得学分: xx
…     …       …       …     …      …      …      …     …
共修:xx科,实得总学分为: xxx

4)系统删除功能
根据用户输入需要删除的学号,查找该条记录,若找到该记录,可对此人的相应数据进行删除,即对该记录进行标记,当重新写入文件里,不予写入,若未找到该记录,提示用户“未找到符合要求的记录”;
(在两个文件内都删除该学号的信息记录)

5)系统排序功能
对“学生成绩基本信息”文件能实现选择按综合成绩或实得学分升序或降序排序并在屏幕上显示输出;

6)系统其他功能模块
根据课题适当加入相应的扩展功能,自由发挥;

注:“学生基本信息”文件及其结构如下:
学号   姓名   性别    宿舍号码  电话号码
01    张三     男       201      651151
02    李若若   女       101      692340
03    王敏     女       312      675678
04    吴东     男       502      663455
05    陈天天   男       409      629783
…     …     …     …   …   …
该文件不需要编程录入数据,由文本编辑工具直接生成,要求库存中至少有10条或以上记录,但不超过100条;
“学生成绩基本信息”文件及其结构如下:
学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩 综合成绩 实得学分
01    A01     大学物理  3    66        78       82      
02    B03     高等数学  4    78        -1        90
01    B03     高等数学  4    45        -1        88
02    C01     VB       3    65        76        66
…     …    …      …      …       …     …    …   
综合成绩的计算公式:如果本课程的实验成绩为-1,则表示无实验,综合成绩=平时成绩*30%+卷面成绩*70%; 如果实验成绩不为-1,表示本课程有实验,综合成绩=平时成绩*15%+实验成绩*15%+卷面成绩*70%

实得学分的计算公式:综合成绩在[90,100] ,应得学分=学分*100%,综合成绩在[80,89]之间 ,应得学分=学分*80%,综合成绩在[70,79]之间 ,应得学分=学分*75%,综合成绩在[60,69]之间,应得学分=学分*60%,综合成绩在60以下,应得学分=学分*0%
2011-06-07 12:20
qrjw123
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-5-30
得分:0 
这个玩意纠结了一星期了 搞不定啊 求大神指导
2011-06-07 12:29
qrjw123
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-5-30
得分:0 
以下是引用C小易在2011-6-7 12:55:40的发言:

我发现一个最大的问题是:函数没有进行参数的传递!最好用数组!程序有点乱!
那我应该怎么改呢?
2011-06-07 13:30
qldxsun
Rank: 4
等 级:业余侠客
帖 子:125
专家分:240
注 册:2011-6-4
得分:10 
用数组或者用传引用的方式(eg:int &i;)
2011-06-07 23:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-342092-1-1.html




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

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