| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1704 人关注过本帖, 3 人收藏
标题:简单的学生成绩管理系统001版。求意见。
只看楼主 加入收藏
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
结帖率:99.34%
收藏(3)
已结贴  问题点数:20 回复次数:47 
简单的学生成绩管理系统001版。求意见。
程序代码:
/*    */  // 首部声明

/*     */  // 头文件&宏定义
#include  <stdio.h>
#include  <stdlib.h>
#include  <math.h>
#include  <string.h>
#include  <malloc.h>
#include  <windows.h>
#include  <time.h>
#define   LEN   sizeof(StuInfo)

/*     */  // 结构体

typedef  struct StuInfo
{  
    int   order;        // 序号
    char  stu_id[16];   // 学号
    char  name[16];     // 姓名
    char  sex[4];       // 性别
    float score[3];     // 数学成绩 英语成绩 c语言成绩
    float ave;         // 学生平均成绩
    float sum;          // 总成绩
    struct StuInfo *next; 
}StuInfo;

/*       */   // 模块声明
void     menu();
StuInfo  *input();
void     output(StuInfo *);
void     search(StuInfo *);
StuInfo  *del(StuInfo *);
StuInfo  *modify(StuInfo *);
StuInfo  *order_sort(StuInfo *);
void     quit();


/*        */  // 主函数

int main(void)
{

    int  i, select;
    char password[12];
    StuInfo *head = NULL;

    printf("************************************************************\n");
    printf("**********************欢迎进入学生成绩管理系统**************\n");
    printf("************************************************************\n");
   
      for(i = 1; i < 5; i++)
    {
        printf("\n请输入密码:");
        gets(password);
        if (strcmp(password, "1") == 0)
        {          
            while(1)
            {
                menu(); //  进入主界面
                printf("请选择:");
                do{
                     scanf("%d", &select);
                }while (select < 1 || select > 7);
           
                    switch (select)
                    {
                        case 1:  head = input();             break;
                        case 2:  output(head);               break;
                         case 3:  search(head);               break;
                        case 4:  head = del(head);           break;
                        case 5:  head = modify(head);        break;
                        case 6:  head = order_sort(head);    break;
                        case 7:  quit();                     break;
                    }
                system("pause");
                system("cls");
            }
        }
        else
        {
           printf("密码错误请第%d次输入:", i + 1);
           gets(password);
        }
    }
    if (5 == i)
    {
        printf("密码验证失败!\n"); 
        exit(0);
    }
    return 0;
}

void  menu()
{
    printf("********************************\n");
    printf("********欢迎进入主菜单**********\n");
    printf("********************************\n");
    printf("\n本系统有如下功能:\n");
    printf("1. 学生信息录入\n");
    printf("2. 学生信息输出\n");
    printf("3. 学生信息查询\n");
    printf("4. 学生信息删除\n");
    printf("5. 学生信息修改\n");
    printf("6. 学生信息排序\n");
    printf("7. 退出系统\n");
    printf("\n");
}

StuInfo *input()
{
   
    StuInfo  *head = NULL, *p;
    int i, flag = 1; float s = 0;

    system("cls");
    while (1)
    {
   
        p = (StuInfo *)malloc(LEN);
        printf("\n请输入学生的序号:");
        scanf("%d", &p -> order);
        if (p -> order <= 0) break;
        printf("\n请输入学生的学号:");
        scanf("%s", p -> stu_id);
        printf("\n请输入学生的姓名:");
        scanf("%s", p -> name);
        printf("\n请输入学生的性别:");
        scanf("%s", p -> sex);
        printf("\n请输入3门课的成绩:");
        for (i = 1; i <= 3; i++)
        {
            switch (i)
            {
            case 1: printf("\n请输入数学成绩:"); break;
            case 2: printf("\n请输入英语成绩:"); break;
            case 3: printf("\n请输入c语言成绩:"); break;
            }
            scanf("%f", &p -> score[i - 1]);
          while (p ->score[i - 1] < 0 || p -> score[i - 1] > 100)
          {  
              printf("\n错误的输入,请重新输入:");
              scanf("%f", &p -> score[i - 1]);
          }
        }
        for (i = 1; i <= 3; i++)
        s += p -> score[i];
        p -> sum = s;
        p -> ave = s / 3;   
       
       
        p -> next = head;
        head = p;
    }
   
    return (head);
}


void output(StuInfo *head)
{
    StuInfo * p;
    int count = 0; // 统计学生数


    p = head;
    if (p == NULL)   
        printf("这是个空表,没有任何学生信息!\n");   
    else
    {
        printf("**********************学生信息***************************************\n");
        printf("序号\t学号\t姓名\t性别\t数学\t英语\tc语言\n");
            printf("-----------------------------------------------------------------\n");
        while (p != NULL)
        {               
           
            printf("%d\t%s\t%s\t%s\t%.2f\t%.2f\t%.2f\n", p -> order, p -> stu_id,
                        p -> name, p -> sex, p -> score[0], p -> score[1], p -> score[2]);
           
            p = p -> next;
            count++;
        }
            printf("************************共有%d个学生信息**************************\n", count);
            printf("**************************** 结束 ********************************\n");
    }
}

void search(StuInfo *head)      
{
    StuInfo  *p;
    int count = 0;
    char subname[16];     // 存放姓名    

    system("cls");
    printf("请输入你要查找的姓名:");
    scanf("%s", subname);
    p = head;           //头指针赋予移到指针
    printf("序号\t学号\t姓名\t性别\t数学\t英语\tc语言\n");
    printf("--------------------------------------------------------------------\n");
    while (p != NULL)
    {      
       if (strcmp(p -> name, subname) == 0)
       {  
           count++;                     
           printf("%d\t%s\t%s\t%s\t%.2f\t%.2f\t%.2f\n", p -> order, p -> stu_id,
                    p -> name, p -> sex, p -> score[0], p -> score[1], p -> score[2]);          
       }     
       p = p -> next;
    }
    printf("\n********找到%d个****************************************************\n", count);
    if (count == 0)
        printf("没有这个名字的学生信息!\n");
}

StuInfo *del(StuInfo *head)
{  
    StuInfo  *p, *q;
    int  count = 0;
    char subname[16];     // 存放姓名

    system("cls");
    printf("请输入你要删除的学生姓名:");
    scanf("%s", subname);

    if (head == NULL)   
    {
        printf("这是个空表,没有任何学生信息!\n");
        return(NULL);
    }
          
    if (strcmp(head -> name, subname) == 0)
    {
           head = head -> next;
           count++;
    }
    else
    {
        q = p = head;
        p = p -> next;
        while (p != NULL)
        {      
           if (strcmp(p -> name, subname) == 0)
           {
               q -> next =  p -> next;   
               p = q -> next;
               count++;
           }
           else
           {
              q = p;
              p = p -> next;
           }
        }       
    }
    if (count == 0)
            printf("没有这个名字的学生信息!\n");
    else
    printf("\n********删除了%d个学生信息*******************************************\n", count);
    return head;
}

StuInfo *modify(StuInfo *head)
{
    StuInfo  *p, *q;
    int suborder;     // 需要修改的序号
    int i;
    float s;

        if (head == NULL)   
    {
        printf("这是个空表,没有任何学生信息!\n");
        return(NULL);
    }
       
    system("cls");
    printf("请输入你要修改的学生序号: ");
    scanf("%d", &suborder);
    p = q = head;
   
    while (p != NULL)
    {
        if (p -> order == suborder)
        {           
            printf("\n请重新输入学生的学号:");
            scanf("%s", p -> stu_id);
            printf("\n请重新输入学生的姓名:");
            scanf("%s", p -> name);
            printf("\n请重新输入学生的性别:");
            scanf("%s", p -> sex);
            printf("\n请重新输入3门课的成绩:");
            for (i = 1; i <= 3; i++)
            {
                switch (i)
                {
                case 1: printf("\n请输入数学成绩:"); break;
                case 2: printf("\n请输入英语成绩:"); break;
                case 3: printf("\n请输入c语言成绩:"); break;
                }
                scanf("%f", &p -> score[i - 1]);
              while (p ->score[i - 1] < 0 || p -> score[i - 1] > 100)
              {  
                  printf("\n错误的输入,请重新输入:");
                  scanf("%f", &p -> score[i - 1]);
              }
            }
            for (i = 1; i <= 3; i++)
            s += p -> score[i];
            p -> sum = s;
            p -> ave = s / 3;        
        }
        p = p -> next;
    }
    return head;
}

StuInfo *order_sort(StuInfo *head)
{
       StuInfo  *p, *q, *r, *s;
    StuInfo  first, tail;
    int select;

    if (head == NULL)
    {
      printf("这是个空表,没有任何学生信息!\n");
      return NULL;
    }
    printf("\n升序输入1\t降序输入2.\n请输入:");
    scanf("%d", &select);
    if (select == 1)
    {
                 first.next = head;
                 p = &first;
                 while (p -> next != NULL)
                 {
                     p = p -> next;
                 }
                p -> next = &tail;
                p = &tail;
                 while (p != first.next)
                 {
                     q = &first;
                     r = q -> next;
                     s = r -> next;
                     while (s != p)
                     {
                         if ((r -> order) > (s -> order))
                         {
                             r -> next = s -> next;
                             s -> next = r;
                             q -> next = s;

                             q = s;
                             s = r -> next;
                         }
                         else
                         {
                            q = r;
                            r = s;
                            s = s -> next;
                         }
                     }
                     p = r;
                 }
                 while (p -> next != &tail)
                     p = p -> next;
                 p -> next = NULL;
    }
         if (select == 2)
         {
            first.next = head;
                 p = &first;
                 while (p -> next != NULL)
                 {
                     p = p -> next;
                 }
                p -> next = &tail;
                p = &tail;
                 while (p != first.next)
                 {
                     q = &first;
                     r = q -> next;
                     s = r -> next;
                     while (s != p)
                     {
                         if ((r -> order) < (s -> order))
                         {
                             r -> next = s -> next;
                             s -> next = r;
                             q -> next = s;

                             q = s;
                             s = r -> next;
                         }
                         else
                         {
                            q = r;
                            r = s;
                            s = s -> next;
                         }
                     }
                     p = r;
                 }
                 while (p -> next != &tail)
                     p = p -> next;
                 p -> next = NULL;                    
        }
           return first.next;
}

void quit(void)
{
    exit(0);
}


[ 本帖最后由 有容就大 于 2012-3-5 20:48 编辑 ]
搜索更多相关主题的帖子: 管理系统 include color 
2012-03-05 20:42
zxd675816777
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:252
专家分:631
注 册:2012-2-3
收藏
得分:2 
哇塞,大大,这个代码长啊。。。我观摩一下好了额。。。晚上还得学实变函数,先撤退了额

数学好难!
2012-03-05 20:43
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:2 
楼主写的代码么...不评价了...你懂的...
多看看别人写的规范的代码,模仿好了再自己造轮子,XX管理系统很多的,自己搜一搜,多想想别人为什么这么写
起码别人看你头文件就乱糟糟的,为了一个NULL去#include<windows.h>?

技术问题,请不要以短消息方式提问
2012-03-05 21:25
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:2 
呵呵 随便说两句  链表的排序首选是插入排序  你的排序我没仔细看 呵呵

建议再加个功能  把信息存入文件

                                         
===========深入<----------------->浅出============
2012-03-05 21:27
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用zaixuexi在2012-3-5 21:25:48的发言:

楼主写的代码么...不评价了...你懂的...
多看看别人写的规范的代码,模仿好了再自己造轮子,XX管理系统很多的,自己搜一搜,多想想别人为什么这么写
起码别人看你头文件就乱糟糟的,为了一个NULL去#include?
别人也是好多头文件啊?  
我也感觉很不规范 又不知咋整。

梅尚程荀
马谭杨奚







                                                       
2012-03-05 21:42
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 4楼 laoyang103
嗯 我文件读取这块不太熟悉,以后争取加进去。

梅尚程荀
马谭杨奚







                                                       
2012-03-05 21:42
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 2楼 zxd675816777
求拍砖

梅尚程荀
马谭杨奚







                                                       
2012-03-05 21:43
zxd675816777
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:252
专家分:631
注 册:2012-2-3
收藏
得分:0 
回复 7楼 有容就大
大大,我水平不行哈,还得多跟你学习噶

数学好难!
2012-03-06 00:06
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用zxd675816777在2012-3-6 00:06:39的发言:

大大,我水平不行哈,还得多跟你学习噶
都是初学,多给意见,相互学习,共同进步。

梅尚程荀
马谭杨奚







                                                       
2012-03-06 09:16
hf201089
Rank: 2
等 级:论坛游民
帖 子:48
专家分:25
注 册:2012-3-4
收藏
得分:2 
有容大大的东西额,可惜我水平有限啊,收藏学习了!
2012-03-06 12:34
快速回复:简单的学生成绩管理系统001版。求意见。
数据加载中...
 
   



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

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