【标题】学生成绩管理的设计与实现

【开发语言】C语言

【概要设计】使用结构体存储学生的学号、姓名和成绩信息,实现对学生成绩类的基本操作:增加、删除、查询、排序

【测试数据】按提示输入5组正确的正确的数据和5组有问题的数据,查看程序能否运行正确

【测试结果】基本功能运行正确,异常输入无法处理(关于性能对比测试,查看C++版:http://www.cnblogs.com/forerve/p/3908716.html

【详细设计】

 #include<stdio.h>
 #include<stdlib.h>
 #include<string.h>
 #include<time.h>

 /*学生结构体*/
 struct student{
     ];
     ];
     ];
     double sum ;
 };

 /*链表节点*/
 typedef struct node{
     struct student st;
     struct node *Next;
 }Node;

 int Add(Node *Head);/*增加学生*/
 void Print(Node *Head);/*打印学生信息*/
 int Find(Node *Head);/*查询学生*/
 int Del(Node *Head);/*删除学生*/
 void sort_sum(Node *Head);/*按总成绩排序*/
 void sort_no(Node *Head);/*按学号排序*/
 void main_remid();/*主要提示信息*/
 void score_remind();/*成绩提示信息*/

 int main()
 {
     Node* Head = (struct node *)malloc(sizeof (Node));
     Head->Next = NULL;
     char op = ' ';
     main_remid();
     while(op != 'q')
     {
         scanf("%c", &op);
         switch(op)
         {
             ':
                 sort_no(Head);
                 break;
             ':
                 Add(Head);
                 break;
             ':
                 Find(Head);
                 break;
             ':
                 Del(Head);
                 break;
             ':
                 sort_sum(Head);
                 break;
             ':
                 main_remid();
                 break;
             default:
                 printf("输入指令未知,请重新输入\n");
                 break;
         }
         printf("请继续选择您想要的操作:\n");
         fflush(stdin);
     }
     ;
 }

 /*增加学生*/
 int Add(Node *Head)
 {
     Node* p = (struct node*)malloc(sizeof (Node));
     p->st.sum = 0.0;
     printf("请输入学生的学号\n");
     scanf("%s", p->st.no);
     printf("请输入学生的姓名\n");
     scanf("%s", p->st.name);
     printf("请输入学生的英语成绩\n");
     scanf(]);
     p->st.sum += p->st.couse[];
     printf("请输入学生的数学成绩\n");
     scanf(]);
     p->st.sum += p->st.couse[];
     printf("请输入学生的语文成绩\n");
     scanf(]);
     p->st.sum += p->st.couse[];
     printf("请输入学生的C语言成绩\n");
     scanf(]);
     fflush(stdin);
     p->st.sum += p->st.couse[];
     if(Head->Next == NULL)
     {
         p->Next = NULL;
         Head ->Next = p;
     }
     else
     {
         p->Next = Head ->Next;
         Head->Next = p;
     }
     ;
 }

 /*按总成绩排序*/
 void sort_sum(Node *Head)
 {
     Node *p = Head;
     Node *temp = (struct node*)malloc(sizeof (Node));
     Node *first = (struct node*)malloc(sizeof (Node));
     memcpy(first, p->Next ,sizeof (Node));
     temp->Next = first;
     first->Next = NULL;
     p = p->Next;
     while(p->Next != NULL)
     {
         Node *t = temp;
         while(t->Next!=NULL && p->Next->st.sum < t->Next->st.sum)
             t = t->Next;
         Node *q = (struct node*)malloc(sizeof (Node));
         memcpy(q, p->Next, sizeof(Node));
         q->Next = t->Next;
         t->Next = q;
         p = p->Next;
     }
     Print(temp);
     p = temp;
     Node *q = temp->Next;
     while(q->Next != NULL)
     {
         free(p);
         p = q;
         q = q->Next;
     }
     free(p);
     free(q);
 }

 /*按学号排序*/
 void sort_no(Node *Head)
 {
     Node *p = Head;
     Node *temp = (struct node*)malloc(sizeof (Node));
     Node *first = (struct node*)malloc(sizeof (Node));
     memcpy(first, p->Next ,sizeof (Node));
     temp->Next = first;
     first->Next = NULL;
     p = p->Next;
     while(p->Next != NULL)
     {
         Node *t = temp;
         while(t->Next!=NULL && atoi(p->Next->st.no)>atoi(t->Next->st.no))
             t = t->Next;
         Node *q = (struct node*)malloc(sizeof (Node));
         memcpy(q, p->Next, sizeof(Node));
         q->Next = t->Next;
         t->Next = q;

         p = p->Next;
     }
     Print(temp);
     p = temp;
     Node *q = temp->Next;
     while(q->Next != NULL)
     {
         free(p);
         p = q;
         q = q->Next;
     }
     free(p);
     free(q);
 }

 /*void sort_sum1(Node *Head)
 {
     Node *temp;
     Node *p = Head;
     temp->Next2 = p->Next;

     p = p->Next;
     p->Next2 = NULL;
     while(p->Next != NULL)
     {
         Node *t = temp;
         while(t->Next2!=NULL && p->Next->st.sum<t->Next2->st.sum)
             t = t->Next2;
         p->Next->Next2 = t->Next2;
         t->Next2 = p->Next;    

         p = p->Next;
     }
     Print(temp);

 }*/

 /*打印学生信息*/
 void Print(Node *Head)
 {
     Node* p = Head;
     score_remind();
     while(p->Next != NULL)
     {
         printf("\t%s", p->Next->st.no);
         printf("\t%s", p->Next->st.name);
         printf(]);
         printf(]);
         printf(]);
         printf(]);
         printf("\t%.1lf\n", p->Next->st.sum);
         p = p->Next;
     }
     p = NULL;
 }

 /*查询学生*/
 int Find(Node *Head)
 {
     Node* p = Head;
     printf("请输入要查找学生的学号:\n");
     ];
     scanf("%s", no);
     while(p->Next != NULL)
     {
         if(!strcmp(no, p->Next->st.no))
         {
             score_remind();
             printf("\t%s", p->Next->st.no);
             printf("\t%s", p->Next->st.name);
             printf(]);
             printf(]);
             printf(]);
             printf(]);
             printf("\t%.1lf\n", p->Next->st.sum);
             p = NULL;
             ;
         }
         p = p->Next;
     }
     printf("查找失败,不存在次学号\n");
     p = NULL;
     ;
 }

 /*删除学生*/
 int Del(Node *Head)
 {
     Node* p = Head;
     printf("请输入要删除学生的学号:\n");
     ];
     scanf("%s", no);
     while(p->Next != NULL)
     {
         if(!strcmp(no, p->Next->st.no))
         {
             Node *q = p->Next;
             p->Next = p->Next->Next;
             printf("%s  %s删除成功\n",q->st.no, q->st.name);
             free(q);
             q = NULL;
             ;
         }
         p = p->Next;
     }
     printf("不存在此学号\n");
 }

 /*主要提示信息*/
 void main_remid()
 {
     printf("\t\t\t学生成绩类\n");
     printf("\t\t1.查询所有学生的成绩信息\n");
     printf("\t\t2.增加学生\n");
     printf("\t\t3.查找学生\n");
     printf("\t\t4.删除学生\n");
     printf("\t\t5.查看总分排名\n");
     printf("\t\t6.查看此提示\n");
     printf("\t\tq.退出系统\n\n");
 }

 /*成绩提示信息*/
 void score_remind()
 {
     printf("\t\t\t 学生成绩信息\n");
     printf("\t学号\t姓名\t数学\t英语\t语文\tC语言\t总成绩\n");
 }

学生成绩管理C语言版的更多相关文章

  1. 学生成绩管理C++版

    [标题]学生成绩管理的设计与实现 [开发语言]C++ [主要技术]STL [概要设计]类名:student 类成员:No.Name.Math.Eng.Chn.Cpro.Sum 成员函数:getname ...

  2. C语言文件实现学生成绩管理

    C语言实现学生成绩管理 项目简介 用C语言的链表及文件操作实现学生成绩的管理,实现主要的添加.修改.删除.查询的主要功能,并在程序关闭时将数据存储在二进制的文件中并加密.下一次打开程序,先解密二进制文 ...

  3. JAVA课程设计 学生成绩管理

    学生成绩管理 可实现功能: 添加学生功能:姓名.学号.性别.出生年月日.(学号自动生成且唯一) 添加学生成绩功能:每个人都有数学.Java与体育四门课,可分课程输入成绩. 根据学生学号查找学生成绩功能 ...

  4. C语言学生成绩管理系统(简易版)

    #include<stdio.h> #include<stdlib.h> #include<string.h> int readstudents(struct st ...

  5. 开学考试学生成绩管理Java

    首先student类 package xuexi; public class Student { private String stunumber; private String name; priv ...

  6. 学生成绩管理系统-JAVA语言测试

     首先右键新建一个工程project 选择Java Project,单击next下一步 project命名为“学生成绩管理系统”,点击finish继续 右键src文件夹新建Package包,取名为te ...

  7. JAVA基础代码分享--学生成绩管理

    问题描述: 从键盘读入学生成绩,找出最高分,并输出学生成绩等级. 成绩>=最高分-10  等级为’A’   成绩>=最高分-20  等级为’B’ 成绩>=最高分-30  等级为’C’ ...

  8. JAVA课程设计个人博客 学生成绩管理 201521123001 张陈东芳

    1. 团队课程设计博客链接 http://www.cnblogs.com/kawajiang/p/7062407.html 2.个人负责模块或任务说明 我主要负责实现学生信息的添加功能.学生成绩的录入 ...

  9. 简易学生成绩管理管理系统(java描述)

    没正式学过java,但是系统学过C++后,初略的看了下java的基本语法,于是我就尝试着用java来写个简单的学生管理系统,功能不齐全,以后有空再补充吧. 写的时候定义了不同的包名字,如jeaven1 ...

随机推荐

  1. Alamofire源码解读系列(十一)之多表单(MultipartFormData)

    本篇讲解跟上传数据相关的多表单 前言 我相信应该有不少的开发者不明白多表单是怎么一回事,然而事实上,多表单确实很简单.试想一下,如果有多个不同类型的文件(png/txt/mp3/pdf等等)需要上传给 ...

  2. xml转义符

    今天在看项目的UrlRewriteFilter(动态url静态化,有利于搜索引擎搜索)的配置文件urlrewrite.xml时,看到了“&”字符,查询之后才知道xml文件中的转义比html中的 ...

  3. 老李分享:jvm垃圾回收

    老李分享:jvm垃圾回收   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478 ...

  4. Fragment深入解析

    写在顶部表示这点很重要:  本文转载自博客:http://blog.csdn.net/lmj623565791/article/details/37970961   欢迎访问原文 自从Fragment ...

  5. 各位Coder看过来

    为了丰富博客内容,也为了解决一些实际的问题,现准备出一系列博文,内容为各位回复评论指明需要的知识点,将在近期为你解决并提供还算精要的讲解:评论内容要求 Coder:+需要的技术内容.技术内容不限领域, ...

  6. Java中一个方法只被一个线程调用一次

    1.想在运行时抛出异常,终止方法的运行 private final Set<Long> THREADS = new HashSet<>(); public void someM ...

  7. 利用php数组函数进行函数式编程

    因为一个BUG, 我在一个摇摇欲坠,几乎碰一下就会散架的项目中某一个角落中发现下面这样一段代码 这段程序与那个BUG有密切的关系. 我来回反复的捉摸这段代码, 发现这段代码实现了两个功能 第一个是在一 ...

  8. 1113: 零起点学算法20——输出特殊值II

    1113: 零起点学算法20--输出特殊值II Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 207 ...

  9. 读书笔记 effective c++ Item 49 理解new-handler的行为

    1. new-handler介绍 当操作符new不能满足内存分配请求的时候,它就会抛出异常.很久之前,它会返回一个null指针,一些旧的编译器仍然会这么做.你仍然会看到这种旧行为,但是我会把关于它的讨 ...

  10. UEditor编辑器和php简单的实现socket通信

    一.UEditor编辑器 使用这个编辑器是需要先下载编辑器文件,记得下载的时候放入自己的网站中,既然是php中使用,自然我下载的就是php的UEditor编辑器了,然后是utf-8的 其实使用很简单, ...