| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1058 人关注过本帖
标题:本人编了一个用结构体录入学生基本信息的学生管理系统,但是不知道哪里有问 ...
只看楼主 加入收藏
赤壁男儿
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2009-12-26
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:2 
本人编了一个用结构体录入学生基本信息的学生管理系统,但是不知道哪里有问题?请各位帮忙指出!
#include<stdio.h>
#include<string.h>
#include<stdlib.h>


//学生课程的基本信息
typedef struct COURSE
{
    char course[20];
    char department[20];
    char teacher[20];
    int mark;
    struct COURSE *next;
}COU;

//学生基本信息
typedef struct STUDENT
{
    char num[30];
    char name[30];
    char sex;
    COU *link;
    float average;
    struct STUDENT *next;
}STU;

void display_menu();
int password();
COU *Course();
void CreateCourse(COU **head,COU *q);
float ave(COU *h);
STU *student();
void CreateStudent(STU **head,STU *m);

main()
{
    int i=0,n;
    int  choice;
    STU *head=NULL,*ptr;
    COU *p,*q;
    i=password();
    if(i)
    {
        printf("密码正确\n");
        display_menu();
        do
        {
            scanf("%d",&choice);
            switch(choice)
            {
            case 1:
                printf("请输入学生的个数\n");
                scanf("%d",&n);
                for(i=0;i<n;i++)
                {
                    CreateStudent(&head,student());
                }
                    for(i=0;i<n;i++)
                    {
                        printf("\t学号\t姓名\t性别\t平均分");
                        printf("\t%s\t%s\t%c\t%f",head->num,head->name,head->sex,head->average);
                        p=head->link;
                        while(p!=NULL)
                        {
                            printf("\t课程\t分数\t任课老师\t系别\n");
                            printf("\t%s\t%d\t%s\t%s\n",p->course,p->mark,p->teacher,p->department);
                            q=p;
                            p=p->next;
                            free(q);
                        }
                ptr=head;
                head=head->next;
                free(ptr);
                    }
            case 6:exit(0);
            }
        }while(choice>0&&choice<7);
    }
    else
        printf("对不起,您已经输入错误码次数超过三次!谢谢使用!\n");
}


int password()
{
    char p;
    char *q=&p;
    int i=0;
    printf("请输入密码,只能输入三次\n");
    for(i=0;i<3;i++)
    {
        scanf("%s",q);
        //getchar();
        if(strcmp(q,"1234")==0)
        {
            break;
        }
        else
        {
            printf("密码错误\n");
        }
    }
    if(i==3)
        return 0;
    else
        return 1;
}

void display_menu()
{
    printf("\t欢迎进入学生管理系统\t\n");
    printf("\t1|输入学生信息\t\n");
    printf("\t2|输出学生信息\t\n");
    printf("\t3|学生成绩排名\t\n");
    printf("\t4|查询学生信息\t\n");
    printf("\t5|删除某个学生\t\n");
    printf("\t6|退出管理系统\t\n");
    printf("\t请在1~6之间选择\t\n");
}

//创建课程链表 并且以不在0-100之间的分数为结束标志
COU *Course()
{
    COU *p;
    p=(COU *)malloc(sizeof(COU));
    printf("请输入课程名\n");
    scanf("%s",&p->course);
    printf("请输入系别\n");
    scanf("%s",&p->department);
    printf("请输入任课老师\n");
    scanf("%s",&p->teacher);
    printf("请输入这门课的成绩");
    scanf("%d",&p->mark);
    if(p->mark<0||p->mark>100)
    {
        return NULL;
        free(p);
    }
        else
        {
            return p;
        }
}

//将学生的各门课程连接成一个链表
void CreateCourse(COU **head,COU *q)
{
    COU *p;
    p=*head;
    if(*head==NULL)
    {
        (*head)=q;
        q->next=NULL;
    }
    else
    {
        while(p!=NULL)
                p++;
            p=q;
            q->next=NULL;
    }
}

float ave(COU *h)
{
    int sum=0;int n=0;
    while(h!=NULL)
    {
        sum=sum+h->mark;
        n++;
        h=h->next;
    }
    if(n)
    {
        return (float) (sum/n);
    }
    else
        return 0;
}

//记录学生基本信息
STU *student()
{
    COU *q;
    STU *p;
    p=(STU *)malloc(sizeof(STU));
    printf("请输入学生的学号\n");
    scanf("%s",&p->num);
    printf("请输入学生的姓名\n");
    scanf("%s",&p->name);
    getchar();
    printf("请输入性别\n");
    scanf("%c",&p->sex);
    p->link=NULL;
    while((q=Course())!=NULL)
    {
        CreateCourse(&(p->link),q);
    }
    p->average=ave(p->link);
    return p;
}

//创建学生链表
void CreateStudent(STU **head,STU *m)
{
    STU *p,*q;
    if(*head==NULL||m->average>=(*head)->average)
    {
        m->next=(*head);*head=m;
    }
    else
    {
        p=*head;q=(*head)->next;
        while(q!=NULL&&m->average<p->average)
        {
            p=q;
            q=q->next;
        }
        m->next=q;
        p->next=m;
    }
   
}
这个程序实现了学生成绩的录入和学生的基本信息,但是不知道哪里有问题,登录密码是1234!
搜索更多相关主题的帖子: 结构体 系统 学生 管理 
2010-05-19 17:17
冥卫
Rank: 8Rank: 8
来 自:深山老林
等 级:蝙蝠侠
帖 子:280
专家分:772
注 册:2010-4-20
收藏
得分:3 
打酱油路过
2010-05-19 22:26
zhujianiu
Rank: 4
等 级:业余侠客
帖 子:126
专家分:244
注 册:2010-5-14
收藏
得分:3 
看了一眼发现
char *p = &q ;
有问题
2010-05-20 10:21
快速回复:本人编了一个用结构体录入学生基本信息的学生管理系统,但是不知道哪里 ...
数据加载中...
 
   



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

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