作业
写个博客理个思路
界面
void jiemian()
{
printf("************************************************\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("****************6.查找学生信息******************\n");
printf("****************7.修改学生信息******************\n");
printf("****************8.删除学生信息******************\n");
printf("****************0.退出系统**********************\n");
printf("************************************************\n");
}
所以要写多个函数分别实现功能
函数
首先
0.主函数
边写函数边补充
int main()
{
while(1)
{
jiemian();
char ch = getch();
switch(ch)
{
case('1')://录入学生信息
inputstudent();
break;
case('2'):
printstudent();//打印学生信息
break;
case('3'):
savestudent();//保存学生信息
break;
case('4'):
readstudent();//读取学生信息
break;
case('5')://统计所有学生人数
printf("学生总人数为:%d\n",countstudent());
system("pause");//暂停
system("cls");//清屏
break;
case('6')://查找学生信息
{
Node* p=findstudent();
if(p!=NULL)
{
printf("学号:%d\t姓名:%s\t年龄;%d\t成绩:%d\n",p->stu.xuehao,p->stu.name,p->stu.age ,p->stu.score);
}
else
printf("没有找到该学员.\n");
system("pause");//暂停
system("cls");//清屏
break;
}
case('7')://修改学生信息
modifystudent();
break;
case('8')://删除学生信息
deletestudent();
break;
case('0')://退出系统
printf("Bye,Bye!!!!\n");
return 0;
break;
default:
printf("你的输入有误,请重新输入.\n");
system("pause");//暂停
system("cls");//清屏
break;
}
}
return 0;
}
1.录入学生信息
先定义结构体,再写一个链表
typedef struct _student
{
char name[20];
int age;
int xuehao;
int score;
}student;
//节点(车厢)
typedef struct _Node
{
student stu; //学生
struct _Node*pNext;//指向下一个节点的指针
}Node;
Node *g_pHead =NULL; //头结点
之后,完成函数。
//录入学生信息
void inputstudent()
{
//创建节点
Node* pNewNode = (Node*)malloc(sizeof(Node));
pNewNode->pNext = NULL;
//头插法
if(g_pHead == NULL)
{
g_pHead = pNewNode;
}
else
{
pNewNode->pNext = g_pHead;
g_pHead = pNewNode;
}
printf("请输入学生姓名:\n");
scanf("%s", pNewNode->stu.name);
printf("请输入学年龄:\n");
scanf("%s", &pNewNode->stu.age);
printf("请输入学生学号:\n");
scanf("%s", &pNewNode->stu.xuehao);
printf("请输入学生成绩:\n");
scanf("%s", &pNewNode->stu.score);
printf("学生信息录入成功.\n");
system("pause");//暂停
system("cls");//清屏
}
新知识
system("pause");//暂停
system("cls");//清屏
2.打印学生信息
void printstudent()
{
printf("*****************************************************************\n");
printf("*****************欢迎使用高校学生成绩管理系统********************\n");
printf("*****************************************************************\n");
printf("*\t学号\t*\t*姓名*\t*\t年龄\t*\t成绩\t*\n");
printf("*****************************************************************\n");
//遍历
Node *p= g_pHead;
while(p!=NULL)
{
printf("*\t%d\t*\t*%s*\t*\t%d\t*\t%d\t*\n",p->stu.xuehao,p->stu.name,p->stu.age ,p->stu.score);
p = p->pNext;
}
system("pause");//暂停
system("cls");//清屏
}
3.保存学生信息
void savestudent()
{
//打开文件
FILE* fp= fopen("F:\\文件管理系统\\学生.txt","w");//没有则自动创建
if(fp==NULL)
{
printf("打开失败.\n");
return;
}
//遍历
Node* p =g_pHead;
while(p!= NULL)
{
fwrite(&p->stu,1,sizeof(student),fp);
p = p->pNext;
}
//关闭文件
fclose(fp);
printf("\n数据保存成功\n");
system("pause");//暂停
system("cls");//清屏
}
4.读取学生信息
void readstudent()
{
//打开文件
FILE* fp= fopen("F:\\文件管理系统\\学生.txt","r");
if(fp==NULL)
{
printf("打开失败.\n");
return;
}
//读取
student stu;
while(fread(&stu,1,sizeof(student),fp))
{
//创建节点
Node* pNewNode = (Node*)malloc(sizeof(Node));
pNewNode->pNext = NULL;
memcpy(pNewNode,&stu,sizeof(student));
//头插法
if(g_pHead == NULL)
{
g_pHead = pNewNode;
}
else
{
pNewNode->pNext = g_pHead;
g_pHead = pNewNode;
}
}
//关闭文件
fclose(fp);
printf("\n加载数据成功.\n");
system("pause");//暂停
system("cls");//清屏
}
5.统计所有学生人数
int countstudent()
{
int ncount=0;//学生总数
Node*p=g_pHead;
while(p!=NULL)
{
ncount++;
p=p->pNext;
}
return ncount;
}
6.查找学生信息
Node* findstudent()
{
int nStuNum;
char szName[20];
printf("请输入查找的学生的学号:\n");
scanf("%d",&nStuNum);
printf("请输入查找的学生的姓名:\n");
scanf("%s",szName);
Node* p=g_pHead;
while(p!=NULL)
{
if(p->stu.xuehao==nStuNum||0==strcmp(p->stu.name,szName))
{
return p;
}
p=p->pNext;
}
//没有找到
return NULL;
}
7.修改学生信息
void modifystudent()
{
int nStuNum;
printf("请输入需要修改的学生信息的学号:\n");
scanf("%d",&nStuNum);
Node* p = g_pHead;
while(p!=NULL)
{
if(p->stu.xuehao==nStuNum)
{
printf("请输入需要修改的学生信息的姓名 年龄 成绩:\n");
scanf("%s %d %d",p->stu.name,&p->stu.age,&p->stu.score);
printf("修改成功.\n");
break;
}
p=p->pNext;
}
if(p==NULL)
{
printf("没有找到该学生的信息.\n");
}
system("pause");//暂停
system("cls");//清屏
}
8.删除学生信息
void deletestudent()
{
int nStuNum;
printf("请输入需要删除的学生信息的学号:\n");
scanf("%d",&nStuNum);
Node* p1;
//判断是不是头结点
if(g_pHead->stu.xuehao==nStuNum)
{
p1=g_pHead;
g_pHead=g_pHead->pNext;
free(p1);
system("pause");//暂停
system("cls");//清屏
return ;
}
//不是头结点
Node*p=g_pHead;
Node*p2;
while(p->pNext!=NULL)
{
if(p->pNext->stu.xuehao==nStuNum)
{
p2=p->pNext;
p->pNext =p->pNext->pNext;
free(p2);
system("pause");//暂停
system("cls");//清屏
return;
}
p=p->pNext;
if(p->pNext ==NULL)
{
break;
}
}
if(p->pNext==NULL)
{
printf("没有找到该学员");
}
system("pause");//暂停
system("cls");//清屏
}
9.退出系统
简单的退出
case('0')://退出系统
printf("Bye,Bye!!!!\n");
return 0;
break;
源代码
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
void jiemian();
void inputstudent();
void printstudent();
void savestudent();
void readstudent();
int countstudent();
void modifystudent();
void deletestudent();
typedef struct _student
{
char name[20];
int age;
int xuehao;
int score;
}student;
//节点(车厢)
typedef struct _Node
{
student stu; //学生
struct _Node*pNext;//指向下一个节点的指针
}Node;
Node *g_pHead =NULL; //头结点
Node* findstudent();//查找学生信息
int main()
{
while(1)
{
jiemian();
char ch = getch();
switch(ch)
{
case('1')://录入学生信息
inputstudent();
break;
case('2'):
printstudent();//打印学生信息
break;
case('3'):
savestudent();//保存学生信息
break;
case('4'):
readstudent();//读取学生信息
break;
case('5')://统计所有学生人数
printf("学生总人数为:%d\n",countstudent());
system("pause");//暂停
system("cls");//清屏
break;
case('6')://查找学生信息
{
Node* p=findstudent();
if(p!=NULL)
{
printf("学号:%d\t姓名:%s\t年龄;%d\t成绩:%d\n",p->stu.xuehao,p->stu.name,p->stu.age ,p->stu.score);
}
else
printf("没有找到该学员.\n");
system("pause");//暂停
system("cls");//清屏
break;
}
case('7')://修改学生信息
modifystudent();
break;
case('8')://删除学生信息
deletestudent();
break;
case('0')://退出系统
printf("Bye,Bye!!!!\n");
return 0;
break;
default:
printf("你的输入有误,请重新输入.\n");
system("pause");//暂停
system("cls");//清屏
break;
}
}
return 0;
}
void jiemian()
{
printf("************************************************\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("****************6.查找学生信息******************\n");
printf("****************7.修改学生信息******************\n");
printf("****************8.删除学生信息******************\n");
printf("****************0.退出系统**********************\n");
printf("************************************************\n");
}
//录入学生信息
void inputstudent()
{
//创建节点
Node* pNewNode = (Node*)malloc(sizeof(Node));
pNewNode->pNext = NULL;
//头插法
if(g_pHead == NULL)
{
g_pHead = pNewNode;
}
else
{
pNewNode->pNext = g_pHead;
g_pHead = pNewNode;
}
printf("请输入学生姓名:\n");
scanf("%s", pNewNode->stu.name);
printf("请输入学年龄:\n");
scanf("%d", &pNewNode->stu.age);
printf("请输入学生学号:\n");
scanf("%d", &pNewNode->stu.xuehao);
printf("请输入学生成绩:\n");
scanf("%d", &pNewNode->stu.score);
printf("学生信息录入成功.\n");
system("pause");//暂停
system("cls");//清屏
}
void printstudent()
{
system("cls");//清屏
printf("*****************************************************************\n");
printf("*****************欢迎使用高校学生成绩管理系统********************\n");
printf("*****************************************************************\n");
printf("*\t学号\t*\t*姓名*\t*\t年龄\t*\t成绩\t*\n");
printf("*****************************************************************\n");
//遍历
Node *p= g_pHead;
while(p!=NULL)
{
printf("*\t%d\t*\t*%s*\t*\t%d\t*\t%d\t*\n",p->stu.xuehao,p->stu.name,p->stu.age ,p->stu.score);
p = p->pNext;
}
printf("*****************************************************************\n");
system("pause");//暂停
system("cls");//清屏
}
void savestudent()
{
//打开文件
FILE* fp= fopen("F:\\文件管理系统\\学生.txt","w");//没有则自动创建
if(fp==NULL)
{
printf("打开失败.\n");
return;
}
//遍历
Node* p =g_pHead;
while(p!= NULL)
{
fwrite(&p->stu,1,sizeof(student),fp);
p = p->pNext;
}
//关闭文件
fclose(fp);
printf("\n数据保存成功\n");
system("pause");//暂停
system("cls");//清屏
}
void readstudent()
{
//打开文件
FILE* fp= fopen("F:\\文件管理系统\\学生.txt","r");
if(fp==NULL)
{
printf("打开失败.\n");
return;
}
//读取
student stu;
while(fread(&stu,1,sizeof(student),fp))
{
//创建节点
Node* pNewNode = (Node*)malloc(sizeof(Node));
pNewNode->pNext = NULL;
memcpy(pNewNode,&stu,sizeof(student));
//头插法
if(g_pHead == NULL)
{
g_pHead = pNewNode;
}
else
{
pNewNode->pNext = g_pHead;
g_pHead = pNewNode;
}
}
//关闭文件
fclose(fp);
printf("\n加载数据成功.\n");
system("pause");//暂停
system("cls");//清屏
}
int countstudent()
{
int ncount=0;//学生总数
Node*p=g_pHead;
while(p!=NULL)
{
ncount++;
p=p->pNext;
}
return ncount;
}
Node* findstudent()
{
int nStuNum;
char szName[20];
printf("请输入查找的学生的学号:\n");
scanf("%d",&nStuNum);
printf("请输入查找的学生的姓名:\n");
scanf("%s",szName);
Node* p=g_pHead;
while(p!=NULL)
{
if(p->stu.xuehao==nStuNum||0==strcmp(p->stu.name,szName))
{
return p;
}
p=p->pNext;
}
//没有找到
return NULL;
}
void modifystudent()
{
int nStuNum;
printf("请输入需要修改的学生信息的学号:\n");
scanf("%d",&nStuNum);
Node* p = g_pHead;
while(p!=NULL)
{
if(p->stu.xuehao==nStuNum)
{
printf("请输入需要修改的学生信息的姓名 年龄 成绩:\n");
scanf("%s %d %d",p->stu.name,&p->stu.age,&p->stu.score);
printf("修改成功.\n");
break;
}
p=p->pNext;
}
if(p==NULL)
{
printf("没有找到该学生的信息.\n");
}
system("pause");//暂停
system("cls");//清屏
}
void deletestudent()
{
int nStuNum;
printf("请输入需要删除的学生信息的学号:\n");
scanf("%d",&nStuNum);
Node* p1;
//判断是不是头结点
if(g_pHead->stu.xuehao==nStuNum)
{
p1=g_pHead;
g_pHead=g_pHead->pNext;
free(p1);
system("pause");//暂停
system("cls");//清屏
return ;
}
//不是头结点
Node*p=g_pHead;
Node*p2;
while(p->pNext!=NULL)
{
if(p->pNext->stu.xuehao==nStuNum)
{
p2=p->pNext;
p->pNext =p->pNext->pNext;
free(p2);
system("pause");//暂停
system("cls");//清屏
return;
}
p=p->pNext;
if(p->pNext ==NULL)
{
break;
}
}
if(p->pNext==NULL)
{
printf("没有找到该学员");
}
system("pause");//暂停
system("cls");//清屏
}
ok 完结散花!!!!!!!!