c语言实现学生成绩录入,主要是对指针的运用
2013-09-24 12:43
369 查看
今儿,有同僚讨论一个源程序,是关于“学生分数的录入的”。
其中用到了链表,涉及到的就是链表的增删改查功能。
我在原来的基础上修改了一些,基本功能已经调试通过。
功能如下:
1、输入type类型
2、type为1,是增加一个学生
为2,删除输入学号的学生
为3,删除输入成绩的学生(暂时为实现)
为4,修改输入的学号的学生分数
为5,查找目标学号的学生成绩
为0, 直接打印所有学生的学号和成绩
源代码如下:
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#define FLUSH \
do{\
int c;\
while( (c = getchar()) != '\n' && c != EOF)\
;\
}while(0)
typedef struct _student{
int num;
float score;
struct _student *next;
}*studentList, studentNode;
studentList createListNode()
{
studentList p = NULL;
p = (studentList)malloc(sizeof(studentNode));
p->num = 0;
p->score = 0;
p->next = NULL;
return p;
}
int listLenGet(studentList list)
{
int len = 0;
studentList p = list;
while (p->next)
len++;
return len;
}
int insertNode(studentList list, studentNode* student)
{
studentList p = list;
while (p->next)
p = p->next;
p->next = student;
return 0;
}
int delNumNode(studentList list, int num)
{
studentList p = list;
studentList q = NULL;
int deleteCount = 0;
while (p->next){
if (p->next->num != num)
p = p->next;
else {
q = p->next;
p->next = q->next;
free(q);
deleteCount++;
}
}
return deleteCount;
}
float delScoreNode(studentList list, float score)
{
studentList p = list;
studentList q = p->next;
while (p->next){
if (q->score== score){
p->next = q->next;
free(q);
q = p->next;
continue;
} else
p = p->next;
}
return 0;
}
int changeNumNodeScore(studentList list, int num, float score)
{
studentList p = list;
studentList q = p->next;
while (p->next){
if (q->num == num){
q->score = score;
return 0;
}
p = p->next;
q = p;
}
return 0;
}
int checkStudentNum(studentList list, int num)
{
studentList p = list;
studentList q = p->next;
while (p->next){
if (q->num == num)
return -1;
p = p->next;
q = p->next;
}
return 0;
}
float numNodeScoreGet(studentList list, int num)
{
studentList p = list;
studentList q = p->next;
while (p->next){
if (q->num == num)
return q->score;
}
return -1;
}
void printList(studentList list)
{
studentList p = list;
studentList q = p->next;
//system("clear");
printf("****************************************\n");
while (p->next){
printf("student num = %d, score = %f\n", q->num, q->score);
p = p->next;
q = p->next;
}
printf("****************************************\n");
}
void printfInfo()
{
//printf("")
}
void doInsertStudent(studentList list)
{
int num = -1;
float score = 0;
studentNode* student = createListNode();
printf("student num = ");
scanf("%d", &num);
printf("score = ");
scanf("%f", &score);
if (checkStudentNum(list, num)){
printf("We have the same num\n");
return ;
}
student->num = num;
student->score = score;
insertNode(list, student);
}
void doDelStudentByNum(studentList list)
{
int num = -1;
int ret = -1;
printf("num = ");
scanf("%d", &num);
ret = delNumNode(list, num);
if (ret <= 0)
printf("Not found the num\n");
}
void doDelStudentByScore(studentList list)
{
}
void doChangeStudentScore(studentList list)
{
int num = -1;
float score = 0;
printf("change score\n");
printf("num = ");
scanf("%d", &num);
printf("score = ");
scanf("%f", &score);
if (checkStudentNum(list, num))
changeNumNodeScore(list, num, score);
else
printf("student dose not exist\n");
}
void doFindStudentScore(studentList list)
{
int num = -1;
float score = 0;
printf("change score\n");
printf("num = ");
scanf("%d", &num);
if (checkStudentNum(list , num))
score = numNodeScoreGet(list, num);
else
printf("student dose not exist\n");
printf("student[%d]'s score is %f\n", num, score);
}
int main()
{
int type = -1;
studentList list = createListNode();
while (1){
printf("Please input type \n");
scanf("%d", &type);
FLUSH;
//system("clear");
if (type < 0 || type > 5){
printf("Please in put the right type\n");
//system("clear");
continue;
}
switch (type){
//system("clear");
case 1://insert
doInsertStudent(list);
break;
case 2://del num
doDelStudentByNum(list);
break;
case 3://del score
doDelStudentByScore(list);
break;
case 4://change
doChangeStudentScore(list);
break;
case 5://look up
doFindStudentScore(list);
break;
case 0:
default:
printList(list);
break;
}
}
return 0;
}
其中用到了链表,涉及到的就是链表的增删改查功能。
我在原来的基础上修改了一些,基本功能已经调试通过。
功能如下:
1、输入type类型
2、type为1,是增加一个学生
为2,删除输入学号的学生
为3,删除输入成绩的学生(暂时为实现)
为4,修改输入的学号的学生分数
为5,查找目标学号的学生成绩
为0, 直接打印所有学生的学号和成绩
源代码如下:
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#define FLUSH \
do{\
int c;\
while( (c = getchar()) != '\n' && c != EOF)\
;\
}while(0)
typedef struct _student{
int num;
float score;
struct _student *next;
}*studentList, studentNode;
studentList createListNode()
{
studentList p = NULL;
p = (studentList)malloc(sizeof(studentNode));
p->num = 0;
p->score = 0;
p->next = NULL;
return p;
}
int listLenGet(studentList list)
{
int len = 0;
studentList p = list;
while (p->next)
len++;
return len;
}
int insertNode(studentList list, studentNode* student)
{
studentList p = list;
while (p->next)
p = p->next;
p->next = student;
return 0;
}
int delNumNode(studentList list, int num)
{
studentList p = list;
studentList q = NULL;
int deleteCount = 0;
while (p->next){
if (p->next->num != num)
p = p->next;
else {
q = p->next;
p->next = q->next;
free(q);
deleteCount++;
}
}
return deleteCount;
}
float delScoreNode(studentList list, float score)
{
studentList p = list;
studentList q = p->next;
while (p->next){
if (q->score== score){
p->next = q->next;
free(q);
q = p->next;
continue;
} else
p = p->next;
}
return 0;
}
int changeNumNodeScore(studentList list, int num, float score)
{
studentList p = list;
studentList q = p->next;
while (p->next){
if (q->num == num){
q->score = score;
return 0;
}
p = p->next;
q = p;
}
return 0;
}
int checkStudentNum(studentList list, int num)
{
studentList p = list;
studentList q = p->next;
while (p->next){
if (q->num == num)
return -1;
p = p->next;
q = p->next;
}
return 0;
}
float numNodeScoreGet(studentList list, int num)
{
studentList p = list;
studentList q = p->next;
while (p->next){
if (q->num == num)
return q->score;
}
return -1;
}
void printList(studentList list)
{
studentList p = list;
studentList q = p->next;
//system("clear");
printf("****************************************\n");
while (p->next){
printf("student num = %d, score = %f\n", q->num, q->score);
p = p->next;
q = p->next;
}
printf("****************************************\n");
}
void printfInfo()
{
//printf("")
}
void doInsertStudent(studentList list)
{
int num = -1;
float score = 0;
studentNode* student = createListNode();
printf("student num = ");
scanf("%d", &num);
printf("score = ");
scanf("%f", &score);
if (checkStudentNum(list, num)){
printf("We have the same num\n");
return ;
}
student->num = num;
student->score = score;
insertNode(list, student);
}
void doDelStudentByNum(studentList list)
{
int num = -1;
int ret = -1;
printf("num = ");
scanf("%d", &num);
ret = delNumNode(list, num);
if (ret <= 0)
printf("Not found the num\n");
}
void doDelStudentByScore(studentList list)
{
}
void doChangeStudentScore(studentList list)
{
int num = -1;
float score = 0;
printf("change score\n");
printf("num = ");
scanf("%d", &num);
printf("score = ");
scanf("%f", &score);
if (checkStudentNum(list, num))
changeNumNodeScore(list, num, score);
else
printf("student dose not exist\n");
}
void doFindStudentScore(studentList list)
{
int num = -1;
float score = 0;
printf("change score\n");
printf("num = ");
scanf("%d", &num);
if (checkStudentNum(list , num))
score = numNodeScoreGet(list, num);
else
printf("student dose not exist\n");
printf("student[%d]'s score is %f\n", num, score);
}
int main()
{
int type = -1;
studentList list = createListNode();
while (1){
printf("Please input type \n");
scanf("%d", &type);
FLUSH;
//system("clear");
if (type < 0 || type > 5){
printf("Please in put the right type\n");
//system("clear");
continue;
}
switch (type){
//system("clear");
case 1://insert
doInsertStudent(list);
break;
case 2://del num
doDelStudentByNum(list);
break;
case 3://del score
doDelStudentByScore(list);
break;
case 4://change
doChangeStudentScore(list);
break;
case 5://look up
doFindStudentScore(list);
break;
case 0:
default:
printList(list);
break;
}
}
return 0;
}
相关文章推荐
- 使用指针实现学生成绩的录入,求最高分最低分、平均值和排序
- 简易的学生成绩录入系统(结构,结构指针,结构数组的运用)
- 实现一个学生的成绩的录入与查询成绩(不算原创,也不算转载,是根据他人代码改动而来)
- 作业6:团队作业——学生成绩录入系统设计与实现
- C语言实现简单学生成绩管理系统
- C语言实现学生成绩管理系统
- 学生成绩管理系统C语言代码实现
- 用字典实现学生信息的录入及按成绩排序输出
- 作业六——团队作业(学生成绩录入系统设计与实现)
- 用链表写的学生管理系统 成绩的录入与查询都已经是实现了
- C语言结构体+数组实现学生学号成绩的统计、排序
- java实现学生成绩录入系统
- 学生成绩录入系统设计与实现(1)
- 学生成绩录入系统设计与实现
- 学生成绩管理系统(C语言实现)
- 作业6 :团队作业——学生成绩录入系统设计与实现(1)
- 用C语言关于学生管理系统的几种实现方法(一位数组,二维数组,指针,结构体)
- 用c++语言编写程序实现学生成绩录入,学生信息编辑,以及学生信息(包括成绩,编号)打印
- [置顶] c语言文件读取 学生成绩管理系统的设计与实现
- C语言实现---学生成绩管理系统