/*----------------------------学生信息管理系统-------------------------------*/
#define N sizeof(struct st)
#define FM (p->dawu+p->gaoshu+p->english)
#include<stdio.h>
#include<string.h>
struct st
{
long ID;
char name[20];
char sex;
int age;
int dawu;
int gaoshu;
int english;
int total;
int avg;
int turn;
struct st *next;
}; /*建立一个包含学生信息的结构体*/
/*函数声明部分*/
void compositor_st(struct st*h); /*排序函数声明*/
void insert_st(struct st**h); /*添加学生信息函数声明*/
void chang_st(struct st*p); /*修改函数生命*/
void delete_st(struct st**h); /*删除函数声明*/
void delete_name(struct st**h); /*删除函数声明(按姓名删除)*/
void delete_ID(struct st**h); /*删除函数声明(按学号删除)*/
void find_st(struct st*p); /*读取函数声明*/
void find_name(struct st*p); /*查询模块函数声明(按姓名查询)*/
void find_ID(struct st*p); /*查询模块函数声明(按学号查询)*/
struct st *read_st(void); /*读取信息函数声明*/
void save(struct st *p); /*保存信息函数声明*/
void print(struct st *); /*输出学生信息函数声明*/
struct st *creat(void); /*创建学生信息链表函数声明*/
/*创建学生信息链表模块*/
struct st *creat(void)
{
struct st *head,*p,*q;
int i,k;
clrscr();
printf("请输入学生人数:\n");
scanf("%d",&k);/*输入学生的人数*/
head=NULL;
if(k>0)
{
head=p=q=(struct st *)malloc(N);/*申请第一个节点,并使head,p,q都指向第一个节点*/
printf("请输入第1个学生的学号:");
scanf("%ld",&p->ID);
printf("\n请输入第1个学生的姓名:");
scanf("%s",p->name);
printf("\n请输入第1个学生的性别:");
scanf(" %c",&p->sex);
printf("\n请输入第1个学生的年龄:");
scanf("%d",&p->age);
printf("\n请输入第1个学生的大物成绩:");
scanf("%d",&p->dawu);
printf("\n请输入第1个学生的高数成绩:");
scanf("%d",&p->gaoshu);
printf("\n请输入第1个学生的英语成绩:");
scanf("%d",&p->english);
p->total=FM;
p->avg=FM/3;
for(i=1;i<k;i++)
{
p=(struct st *)malloc(N);/*使p指向新申请的节点*/
printf("\n请输入第%d个学生的学号:",i+1);
scanf("%ld",&p->ID);
printf("\n请输入第%d个学生的姓名:",i+1);
scanf("%s",p->name);
printf("\n请输入第%d个学生的性别:",i+1);
scanf(" %c",&p->sex);
printf("\n请输入第%d个学生的年龄:",i+1);
scanf("%d",&p->age);
printf("\n请输入第%d个学生的大物成绩:",i+1);
scanf("%d",&p->dawu);
printf("\n请输入第%d个学生的高数成绩:",i+1);
scanf("%d",&p->gaoshu);
printf("\n请输入第%d个学生的英语成绩:",i+1);
scanf("%d",&p->english);
p->total=FM;
p->avg=FM/3;
q->next=p;/*使第二个节点连接到表尾*/
q=p;/*使q指向第二个节点*/
}
q->next=NULL;/*使最后一个节点的指针域为空*/
}
printf("成功录入学生信息,按任意键返回主菜单!\n");
getch();
return head;
}
/*显示模块*/
void print(struct st *p)
{
clrscr();
if(p==NULL)
{
printf("\n\n\n\n\n\n\n\n\n\n\n\n**********************没有可以显示的内容,按任意键返回***********************");
getch();return;
}
printf("--------------------------------------------------------------------------------\n");
printf("学号 姓名 性别 年龄 大物 高数 英语 总分 平均分\n");
while(p!=NULL)
{
printf("%ld %-15s %c %d %d %d %d %d %d\n",p->ID,p->name,p->sex,p->age,p->dawu,p->gaoshu,p->english,p->total,p->avg);
p=p->next;
}
printf("按任意键返回主菜单!\n");
getch();
}
/*保存模块*/
void save(struct st *p)
{
FILE *fp;
clrscr();
if((fp=fopen("st.txt","w"))==NULL)
{
printf("不能打开此文件:\n");
getch();
exit(1);
}
while(p!=NULL)
{
fprintf(fp,"%ld %s %c %d %d %d %d %d %d\n",p->ID,p->name,p->sex,p->age,p->dawu,p->gaoshu,p->english,p->total,p->avg);/*将学生信息按照指定格式输出到fp文件中*/
p=p->next;
}
fclose(fp);
printf("保存成功,按任意键返回主菜单!\n");
getch();
}
/*读取模块*/
struct st* read_st(void)
{
FILE *fp;
struct st *p,*q,*w,*head=NULL;
clrscr();
if((fp=fopen("st.txt","r"))==NULL)
{
printf("\n\n\n\n\n\n\n\n\n\n\n\n******暂时没有任何学生信息,按任意键返回录入学生信息******\n");
getch();
return head;
}
head=q=p=(struct st*)malloc(N);p->next=NULL;
while(fscanf(fp,"%ld %s %c %d %d %d %d %d %d",&p->ID,p->name,&p->sex,&p->age,&p->dawu,&p->gaoshu,&p->english,&p->total,&p->avg)!=EOF)
{
p=(struct st*)malloc(N);
q->next=p;
w=q;
q=p;
p->next=NULL;
}
free(q);
w->next=NULL;
fclose(fp);
printf("*************读取成功,按任意键返回主菜单**************\n");
getch();
return head;
}
/*按学号查询*/
void find_ID(struct st*p)
{
long ID;
struct st*q;
clrscr();
if(p==NULL)
{
printf("对不起,当前没有任何学生信息可以查询,按任意键返回!\n");
getch();
return;
}
printf("请输入您要查询的学号(ID):\n");
scanf("%ld",&ID);
while(p!=NULL)
{
if(p->ID==ID)
{ clrscr();
printf("------------------------------------------------------------------------------\n");
printf("学号 姓名 性别 年龄 大物 高数 英语 总分 平均分\n");
printf("%ld %-15s %c %d %d %d %d %d %d\n",p->ID,p->name,p->sex,p->age,p->dawu,p->gaoshu,p->english,p->total,p->avg);
printf("按任意键返回");break;
}
q=p;
p=p->next;
}
if(p==NULL&&q->ID!=ID)
printf("\n\n\n\n\n\n\n\n\n\n\n\n*****************对不起,您要查找的信息暂时不存在,按任意键返回******************\n");
getch();
}
/*按姓名查询*/
void find_name(struct st*p)
{
char name[30];
struct st*q;
clrscr();
if(p==NULL)
{
printf("对不起,当前没有任何学生信息可以查询,按任意键返回!\n");
getch();
return;
}
printf("请输入你要所查询的姓名(name):\n");
scanf("%s",&name);
while(p!=NULL)
{
if(strcmp(p->name,name)==0)
{
printf("--------------------------------------------------------------------------------\n");
printf("学号 姓名 性别 年龄 大物 高数 英语 总分 平均分\n");
printf("%ld %-15s %c %d %d %d %d %d %d\n",p->ID,p->name,p->sex,p->age,p->dawu,p->gaoshu,p->english,p->total,p->avg);
printf("按任意键返回");break;
}
q=p;
p=q->next;
}
if(p==NULL&&strcmp(q->name,name)!=0)
printf("\n\n\n\n\n\n\n\n\n\n\n\n****************对不起,你要查的学生信息暂时不存在,按任意键返回****************\n");
getch();
}
/*查询模块*/
void find_st(struct st*p)
{
int choice;
do
{
clrscr();
printf("---------------------------------查询学生信息-----------------------------------\n");
printf("\n\n\t\t\t1、按学号查询\n\n");
printf("\t\t\t2、按姓名查询\n\n");
printf("\t\t\t0、返回主菜单\n\n");
printf("请输入(0-2):");
scanf("%d",&choice);
switch(choice)
{
case 1:find_ID(p);break;
case 2:find_name(p);break;
case 0:break;
default:printf("您的输入有误!按任意键重新输入\n");getch(); break;
}
}while(choice!=0);
}
/*按学号删除*/
void delete_ID(struct st**h)
{
long ID;
struct st *p1,*p2;
clrsc
c语言实现学生管理系统(用链表)
5星 · 超过95%的资源 需积分: 3 40 浏览量
2009-09-28
17:28:40
上传
评论
收藏 14KB RAR 举报
Boone
- 粉丝: 8
- 资源: 9
最新资源
- mmqrcode1714153659780.png
- Screenshot_2024-04-27-06-08-58-486_com.baidu.xin.aiqicha.jpg
- 基于Javaweb+Tomcat+MySQL的大学生公寓管理系统+sql文件.zip
- 实训作业基于javaweb的订单管理系统源码+数据库+实训报告.zip
- 多机调度问题贪心算法基于最小堆和贪心算法求解多机调度问题.zip
- 基于同态加密技术的匿名电子投票系统源码.zip
- Pyqt5项目框架-PyQt项目开发实践
- 基于C通过MQTT的智能农业大棚管理系统(本科毕业设计)
- python+CNN的网络入侵检测算法源码.zip
- js 实现记住密码功能 js.cookie.min.js
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈