| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 436 人关注过本帖
标题:学籍管理
只看楼主 加入收藏
a380627112
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-9-16
收藏
 问题点数:0 回复次数:0 
学籍管理
这是我们自己编的一个考试题。说实话对C不太懂,也看着书就烦。编的过于简单,可读性就更差了。希望大家指点下。
同时请那位大虾给个菜单编程的方法。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student
{
    char num[10];  /*学号,便于查询故设置为数组*/
    char name[20];
    char sex[4];
    char add[20];

    int  age;
    int clas;
    int gaoshu;
    int yingyu;
    int xiandai;
    int lisan;
    int wuli;
    int deyu;    
    int tiyu;

    int totle;
    float jiaquan;
};
typedef struct NODE  /*自定义类型说明*/
{
    struct student data;
    struct NODE *next;
}NODE,*Link;

int count=0;   /*学生人数数据计数器*/



/*==========此函数用于输出数据=======*/
void printe(NODE *p)
{
    printf("姓名: %s\n籍贯:%s\n性别:%s\n年龄:%d\n",p->data.name,p->data.add,p->data.sex,p->data.age);
    printf("高等数学: %d\n英语: %d\n线性代数: %d\n离散数学: %d\n",p->data.gaoshu,p->data.yingyu,p->data.xiandai,p->data.lisan);
    printf("高等物理: %d\n思想品德教育: %d\n体育 :%d\n加权成绩: %.1f\n",p->data.wuli,p->data.deyu,p->data.tiyu,p->data.jiaquan);/*学分积点
}

/*=========查询函数===========*/

NODE *search(Link l,char nameornum[],int way) /*用于查询的指针函数*/
{
    NODE *r;
    if(way==1) /*按学号查找*/
    {
        r=l->next;
        while(r!=NULL)
        {
            if(strcmp(r->data.num,nameornum)==0)
                return r;
            r=r->next;
        }
    }
    else if(way==2) /*按姓名查找*/
    {
        r=l->next;
        while(r!=NULL)
        {
            if(strcmp(r->data.name,nameornum)==0)
                return r;
            r=r->next;
        }
    }
    return 0;
}
/*=========添加学生信息===========*/
void add(Link l)
{
    NODE *p,*r,*s;
    char num[10];
    r=l;
    s=l->next;
    while(r->next!=NULL)
        r=r->next; /*将指针置于学生档案数据最末尾*/
    while(1)
    {
        printf("请输入学号(输入'exit'则完成输入返回上级菜单:)");
        scanf("%s",num);
        if(strcmp(num,"exit")==0)
            break;
        p=(NODE *)malloc(sizeof(NODE));   
        strcpy(p->data.num,num);
        printf("请输入姓名:");
        scanf("%s",p->data.name);
        printf("请输入性别:");
        scanf("%s",p->data.sex);
        printf("请输入籍贯:");         
        scanf("%s",p->data.add);
        printf("请输入班级:");
        scanf("%d",&p->data.clas);
        printf("请输入年龄:");
        scanf("%d",&p->data.age);
        printf("请输入高等数学成绩:");
        scanf("%d",&p->data.gaoshu);  
        printf("请输入英语成绩:");
        scanf("%d",&p->data.yingyu);
        printf("请输入线性代数成绩:");
        scanf("%d",&p->data.xiandai);
        printf("请输入离散数学成绩:");
        scanf("%d",&p->data.lisan);
        printf("请输入高等物理成绩:");
        scanf("%d",&p->data.wuli);
        printf("请输入思想品德教育成绩:");
        scanf("%d",&p->data.deyu);
        printf("请输入体育成绩:");
        scanf("%d",&p->data.tiyu);

        p->data.jiaquan=(p->data.gaoshu*3+p->data.yingyu*3+p->data.xiandai*2+p->data.lisan*2+p->data.wuli*2+p->data.deyu+p->data.tiyu*2)/15; /*计算加权成绩*/
        count++;      /*学生人数加1*/
        p->next=NULL;
        r->next=p;
        r=p;          /*构造单链表*/
    }
}
/*=========删除学生信息===========*/
void del(Link l)
{
    int way;
    NODE *p,*r;
    char nameornum[20];
    printf("\n>1按学号删除\n>2按姓名删除\n");
    scanf("%d",&way);
    if(way==1)   
        printf("请你输入要删除的学号:");
    else if(way==2)     
        printf("请你输入要删除的姓名:");     
    else
        printf("\n=====输入错误!=====\n");  
    scanf("%s",nameornum);
    p=search(l,nameornum,way);
    if(p)
    {
        r=l;
        while(r->next!=p)
            r=r->next;
        r->next=p->next;
        free(p);
        printf("\n=====该学生已经成功删除!=====\n");
        count--;    /*学生人数减1*/
    }
    else
        printf("\n=====没有找到该学生!=====\n");  
}
/*=========修改学生信息===========*/
void update(Link l)
{
    int way;
    char nameornum[20];
    NODE *p,*r;
    printf("\n>1按学号修改\n2按姓名修改\n");
    scanf("%d",&way);
    if(way==1)   
        printf("请你输入要修改者的学号:");
    else if(way==2)   
        printf("请你输入要修改者的姓名:");     
    else
        printf("\n=====输入错误!=====\n");
    scanf("%s",nameornum);
    r=search(l,nameornum,way);
    if(r)
    {
        p=l;
        while(p!=r)
            p=p->next;
        printf("\n>1修改学生基本情况\n>2修改学生成绩\n");
        scanf("%d",&way);
        if(way==1)
        {
            printf("请输入姓名:");
               scanf("%s",p->data.name);
            printf("请输入班级:");
            scanf("%d",&p->data.clas);
            printf("请输入性别:");
            scanf("%s",p->data.sex);
            printf("请输入籍贯:");     
            scanf("%s",p->data.add);
            printf("请输入年龄:");
            scanf("%d",&p->data.age);
        }
        else
        if(way==2)
        {
            printf("请输入高等数学成绩:");
            scanf("%d",&p->data.gaoshu);  
            printf("请输入英语成绩:");
            scanf("%d",&p->data.yingyu);
            printf("请输入线性代数成绩:");
            scanf("%d",&p->data.xiandai);
            printf("请输入离散数学成绩:");
            scanf("%d",&p->data.lisan);
            printf("请输入高等物理成绩:");
            scanf("%d",&p->data.wuli);
            printf("请输入思想品德教育成绩:");
            scanf("%d",&p->data.deyu);
            printf("请输入体育成绩:");
            scanf("%d",&p->data.tiyu);
          p->data.jiaquan=(p->data.gaoshu*3+p->data.yingyu*3+p->data.xiandai*2+p->data.lisan*2+p->data.wuli*2+p->data.deyu+p->data.tiyu*2)/15;
        }
        else
            printf("\n=====输入错误!=====\n");
    }
    else
        printf("\n=====没有找到该学生!=====\n");
}

/*=========查询学生信息===========*/
void find(Link l)
{
    int way;
    char nameornum[20];
    NODE *p;
    printf("\n>1  按学号查找\n>2  按姓名查找\n");
    scanf("%d",&way);
    if(way==1)   
        printf("请你输入要查找的学号:");
    else if(way==2)   
        printf("请你输入要查找的姓名:");
    else
        printf("\n=====输入错误!=====\n");  
    scanf("%s",nameornum);
    p=search(l,nameornum,way);     /*返回值为指向被查找者的NODE型指针*/
    if(p)
    {
        printf("━━━━━━━━━━━━━━━查找结果━━━━━━━━━━━━━━━━\n");
        printe(p);
        printf("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n");
    }
    else
        printf("\n=====没有找到该学生!=====\n");
}
搜索更多相关主题的帖子: 学籍管理 
2008-09-16 08:53
快速回复:学籍管理
数据加载中...
 
   



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

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