学生成绩管理C语言版
【标题】学生成绩管理的设计与实现
【开发语言】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语言版的更多相关文章
- 学生成绩管理C++版
[标题]学生成绩管理的设计与实现 [开发语言]C++ [主要技术]STL [概要设计]类名:student 类成员:No.Name.Math.Eng.Chn.Cpro.Sum 成员函数:getname ...
- C语言文件实现学生成绩管理
C语言实现学生成绩管理 项目简介 用C语言的链表及文件操作实现学生成绩的管理,实现主要的添加.修改.删除.查询的主要功能,并在程序关闭时将数据存储在二进制的文件中并加密.下一次打开程序,先解密二进制文 ...
- JAVA课程设计 学生成绩管理
学生成绩管理 可实现功能: 添加学生功能:姓名.学号.性别.出生年月日.(学号自动生成且唯一) 添加学生成绩功能:每个人都有数学.Java与体育四门课,可分课程输入成绩. 根据学生学号查找学生成绩功能 ...
- C语言学生成绩管理系统(简易版)
#include<stdio.h> #include<stdlib.h> #include<string.h> int readstudents(struct st ...
- 开学考试学生成绩管理Java
首先student类 package xuexi; public class Student { private String stunumber; private String name; priv ...
- 学生成绩管理系统-JAVA语言测试
首先右键新建一个工程project 选择Java Project,单击next下一步 project命名为“学生成绩管理系统”,点击finish继续 右键src文件夹新建Package包,取名为te ...
- JAVA基础代码分享--学生成绩管理
问题描述: 从键盘读入学生成绩,找出最高分,并输出学生成绩等级. 成绩>=最高分-10 等级为’A’ 成绩>=最高分-20 等级为’B’ 成绩>=最高分-30 等级为’C’ ...
- JAVA课程设计个人博客 学生成绩管理 201521123001 张陈东芳
1. 团队课程设计博客链接 http://www.cnblogs.com/kawajiang/p/7062407.html 2.个人负责模块或任务说明 我主要负责实现学生信息的添加功能.学生成绩的录入 ...
- 简易学生成绩管理管理系统(java描述)
没正式学过java,但是系统学过C++后,初略的看了下java的基本语法,于是我就尝试着用java来写个简单的学生管理系统,功能不齐全,以后有空再补充吧. 写的时候定义了不同的包名字,如jeaven1 ...
随机推荐
- Oracle DQL查询语言整理
select * from t_hq_ryxx; select nianl, xingm from t_hq_ryxx; select nianl as 年龄, xingm as 姓名 from t_ ...
- socket bind详解
http://www.cnblogs.com/nightwatcher/archive/2011/07/03/2096717.html 在最开始接触bind的时候,只是在写基于tcp的server端的 ...
- 性能测试分享:Jmeter多机协作原理
性能测试分享:Jmeter多机协作原理 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:90 ...
- Java并发编程:同步锁、读写锁
之前我们说过线程安全问题可以用锁机制来解决,即线程必要要先获得锁,之后才能进行其他操作.其实在 Java 的 API 中有这样一些锁类可以提供给我们使用,与其他对象作为锁相比,它们具有更强大的功能. ...
- JavaScript设计模式读书笔记之一:接口
接口 在JavaScrip中模仿接口 用注释描述接口 用属性检查模仿接口 用鸭式辨型模仿接口 依赖于接口的设计模式 工厂模式 组合模式 装饰者模式 命令模式 接口 在JavaScrip中模仿接口 用注 ...
- android开发之-Android 开发之4.0界面设计原则-整理
设计原则: 一.让人着迷: 1.给人惊喜:使用漂亮的界面.精心的动画.适时的音乐. 2.真实的对象比按钮和菜单更有趣 这句话的意思是:使用描述描述性的图标作为快捷方式,界面美观 当然这个快捷方 ...
- [转载]转载一篇好文章作为Java与面向对象之随感(3)
关于对象与引用之间的一些基本概念. 初学Java时,在很长一段时间里,总觉得基本概念很模糊.后来才知道,在许多Java书中,把对象和对象的引用混为一谈.可是,如果我分不清对象与对象引用, 那实在没法很 ...
- Java与面向对象之随感(1)
大一下学期上完了c++课程,当时自我感觉很良好,认为对面向对象编程已经是身经百战了,但是上了院里HuangYu老师的Java课之后,才发现自己对于面向对象的编程风格的理解只在皮毛,着实惭愧不已. 假设 ...
- IEnumerable<T>和IQueryable<T>
建议29.区别LINQ查询中的IEnumerable<T>和IQueryable<T> LINQ查询方法一共提供了两类扩展方法,在System.Linq命名空间下,有两个静态类 ...
- 关于Java中继承多接口同名方法的问题
在Java中如果一个类同时继承接口A与B,并且这两个接口中具有同名方法,会怎么样? 动手做实验: interface A{ void fun(); } interface B{ void fun(); ...