问题描述:
/*
* Copyright (c)2015,烟台大学计算机与控制工程学院
* All rights reserved.
* 文件名称:aaaa.cbp
* 作 者:张芸嘉
* 完成日期:2015年12月24日
* 版 本 号:v1.0
* 问题描述: 本项目为学生信息管理系统,设计一个可以管理学生信息的软件系统。
* 输入描述:学生信息
* 程序输出:
*/
架构:
代码:
头文件 list.h
/***********************************************************
* 版权所有 (C)2015, 张芸嘉
*
* 文件名称:xxxxgl.cbp
* 文件标识:无
* 内容摘要:学生信息管理系统
* 其它说明:无
* 当前版本: V2.0
* 作 者:张芸嘉
* 完成日期: 20151224
*
* 修改记录1:
* 修改日期: 20151222
* 版本号: V1.0
* 修改人: 张芸嘉
* 修改内容:创建
*
* 修改记录2:
* 修改日期: 20151223
* 版本号: V1.1
* 修改人: 张芸嘉
* 修改内容:各模块建立1
*
* 修改记录3:
* 修改日期: 20151224
* 版本号: V1.2
* 修改人:张芸嘉
* 修改内容:各模块建立2
*
* 修改记录4:
* 修改日期: 20151224
* 版本号: V2.0
* 修改人: 张芸嘉
* 修改内容:完善
**********************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STUDENT 2
typedef struct student
{
int num; //学号
char name[20]; //姓名
int chinese ; //语文成绩
int English; //英语成绩
int math; //高数成绩
struct student *next; //指向下一个学生的指针
} student;
extern student *head;
extern int length; //链表的长度
//函数原型
student *init(); //初始化函数
void create(); //创建信息
void display(); //显示函数
void searchXH(); //按学号查找信息
void searchXM(); //按姓名查找信息
void insert(); //插入信息
void Delete(); //删除信息
void menu(); //主菜单函数
主函数 main.cpp
/***********************************************************
* 功能描述: 主函数
* 输入参数:
* 输出参数:
* 返回值 : (1)
* 其它说明: 学生信息包括学号、姓名、性别、高数成绩、英语成绩
************************************************************/
#include"list.h"
int main(void)
{
system("color 1");
int a;
menu();
int choice;
while(1)
{
printf("请选择您需要的功能:");
scanf("%d",&a);
switch(a)
{
case 0:
return 0;
case 1:
create();
menu();
break;
case 2:
if(head)
{
display();
menu();
}
else
{
printf("学生信息为空,请先建立学生信息!\n");
menu();
}
break;
case 3:
if(head)
{
printf("请选择按学号查找或按姓名查找,若是按学号查找请输入0,按姓名查找请按1\n");
scanf("%d",&choice);
if(choice==0)
{
searchXH();
}
else
{
searchXM();
}
menu();
}
else
{
printf("学生信息为空,请先建立学生信息!\n");
menu();
}
break;
case 4:
if(head)
{
Delete();
menu();
}
else
{
printf("学生信息为空,请先建立学生信息!\n");
menu();
}
break;
case 5:
if(head)
{
insert();
menu();
}
else
{
printf("学生信息为空,请先建立学生信息!\n");
menu();
}
break;
default:
break;
}
}
system("pause");
return 0;
}
源文件函数 list.cpp
#include"list.h"
int length;
student *head;
student *init()
{
return NULL; //返回空指针
}
/***********************************************************
* 功能描述: 添加学生信息
* 输入参数: 学生信息
* 输出参数: 显示学生的信息
* 返回值 : (1)
* 其它说明: 学生信息包括学号、姓名、语文成绩、高数成绩、英语成绩
************************************************************/
void create()
{
student *p1,*p2;
length=0;
int number=0;
p1=(student *)malloc(sizeof(student));
p1->num=-1;
if(head==NULL)
head=p1;
printf("请输入学生的学号、姓名、语文成绩、高数成绩、英语成绩:\n");
while(number<=7)
{
p2=(student *)malloc(sizeof(student));
scanf("%d %s %d %d %d",&p2->num,p2->name,&p2->chinese,&p2->English,&p2->math); //输入学生信息
if(p2->num==0)
{
printf("学生信息建立完成!\n");
break;
}
length++; //链表的长度
p1->next=p2;
p2->next=NULL;
p1=p1->next; //移动指针,指向下一结点
number++;
}
return ;
}
/***********************************************************
* 功能描述: 显示学生信息
* 输入参数:
* 输出参数: 显示学生的信息
* 返回值 : (1)
* 其它说明: 学生信息包括学号、姓名、语文成绩、高数成绩、英语成绩
************************************************************/
void display()
{
student *p=head->next;
printf("链表中所有的学生信息如下:\n");
while(p!=NULL)
{
printf("%d %s %d %d %d\n",p->num,p->name,p->chinese,p->English,p->math);
p=p->next;
}
return ;
}
/***********************************************************
* 功能描述: 按学号查找学生信息
* 输入参数: 学生学号
* 输出参数: 显示学生的信息
* 返回值 : (1)
* 其它说明: 学生信息包括学号、姓名、语文成绩、高数成绩、英语成绩
************************************************************/
void searchXH()
{
int num_;
student *p=head->next;
printf("需要查找的学生学号为:");
scanf("%d",&num_);
while(p!=NULL)
{
if(p->num==num_)
{
printf("学号为%d的学生的信息如下:\n",num_);
printf("%d %s %d %d %d\n",p->num,p->name,p->chinese,p->English,p->math);
return;
}
p=p->next;
}
if(p==NULL)
printf("无此记录!\n");
return ;
}
/***********************************************************
* 功能描述: 按姓名查找学生信息
* 输入参数: 学生姓名
* 输出参数: 显示学生的信息
* 返回值 : (1)
* 其它说明: 学生信息包括学号、姓名、语文成绩、高数成绩、英语成绩
************************************************************/
void searchXM()
{
char na_me[20];
student *p=head->next;
printf("需要查找的学生姓名为:");
scanf("%s",na_me);
while(p!=NULL)
{
if(!(strcmp(p->name,na_me)))
{
printf("姓名为%s的学生的信息如下:\n",na_me);
printf("%d %s %d %d %d\n",p->num,p->name,p->chinese,p->English,p->math);
return;
}
p=p->next;
}
if(p==NULL)
printf("无此记录!\n");
return ;
}
/***********************************************************
* 功能描述: 指定位置插入学生信息
* 输入参数: 插入位置及学生信息
* 输出参数: 显示插入完成后的学生信息
* 返回值 : (1)
* 其它说明: 学生信息包括学号、姓名、语文成绩、高数成绩、英语成绩
************************************************************/
void insert()
{
int num_,i;
student *p,*q;
p=head;
printf("请输入你要插入位置: ");
scanf("%d",&num_);
if(num_>length)
{
printf("找不到要插入的位置\n");
return ;
}
else
{
printf("请输入你要插入的学生的学号、姓名、语文成绩、英语成绩、高数成绩:\n");
q=(student *)malloc(sizeof(student));
scanf("%d %s %d %d %d",&q->num,q->name,&q->chinese,&q->English,&q->math);
while(p!=NULL)
{
if(p->num==q->num)
{
printf("该学号已经存在,无法插入信息!\n");
return ;
}
p=p->next;
}
p=head;
for(i=0; i<num_; i++)
p=p->next;
q->next=p->next;
p->next=q;
length++;
printf("插入学生信息成功!\n");
return ;
}
}
/***********************************************************
* 功能描述: 删除学生信息
* 输入参数: 删除学生学号
* 输出参数:
* 返回值 : (1)
* 其它说明: 学生信息包括学号、姓名、语文成绩、高数成绩、英语成绩
************************************************************/
void Delete()
{
int num_;
student *p,*q;
q=head,p=head->next;
printf("请输入要删除的学生的学号:\n");
scanf("%d",&num_);
while(p!=NULL)
{
if(p->num==num_)
{
q->next=p->next;
free(p);
length--;
printf("删除成功!\n");
return ;
}
p=p->next;
q=q->next;
}
if(p==NULL)
{
printf("找不到要删除的学号!\n");
return ;
}
}
/***********************************************************
* 功能描述: 主菜单
* 输入参数: 所需功能代号
* 输出参数:
* 返回值 : (1)
* 其它说明: 学生信息包括学号、姓名、语文成绩、高数成绩、英语成绩
************************************************************/
void menu()
{
system("color 08");
printf("***************************************************************\n");
printf("** ︵__╭╭╭╭╭___︵ **\n");
printf("**│ │ **\n");
printf("**│ │ ╭─────────╮ **\n");
printf("**│ ● ● │ │ 欢迎使用 │ **\n");
printf("**│ ╭──╮ │ │学生信息管理系统^o^ │ **\n");
printf("**│ │●●│ │ ╭╮╰─────────╯ **\n");
printf("**│ ╰──╯ │○ ╰╯ **\n");
printf("**╰──┬◎───┬◎──╯ **\n");
printf("***************************************************************\n");
printf("| 1、 添加学生信息 |\n");
printf("| 2、 显示学生信息 |\n");
printf("| 3、 查找某个学生信息 |\n");
printf("| 4、 删除指定学号的学生 |\n");
printf("| 5、 指定的位置上插入学生信息 |\n");
printf("****************************************************************\n");
return ;
}
运行结果:添加学生信息
显示学生信息
按学号查找学生信息
按姓名查找学生信息
删除指定学号学生信息
指定位置上插入学生信息
知识点总结:
此程序逻辑结构属于线性结构,存储结构为链式存储结构,程序中包含单链表以及结构体数组等知识点。
学习心得:
通过这次课程设计让我对链表的结构有了更深的了解,在以后的应用中也会更加熟悉。也让我认识到,想要真正做出一个项目会有很多困难和挫折,需要下很大的功夫。这几天,我深刻体验到了团队的力量,如果没有老师、同学的帮助,我的项目也不会这么顺利的完成。总之,这次课程设计真的让我收获了很多,学到了很多,我相信以后会更好!!!!!