本文主要详细介绍了用C语言实现的简单的学生信息管理系统。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。
学生信息管理系统的功能包括,或者你可以自己添加或者改进一些功能。
在主函数中调用这八个函数。
学生信息包括他们的姓名、年龄、学号和成绩。需要定义一个结构(结构是一个全局变量,所以需要全局声明):
typedef struct _student{
char name[20];
int age
int stuNum
int分数;
}学生;
需要有存储数据的空间,所以使用单链表存储,定义如下:
typedef struct _Node{
学生stu1
struct _ Node * pNext
}节点;
此时,您需要给链表一个头:
Node * g _ head=NULL
录入学生信息:
1)创建一个新节点,它包括结构数据和下一个指针。
2)需要判断头节点是否为空。如果为空,此时新节点需要支付给头节点。如果不为空,则节点的下一个指针=头节点(头插入法,如果可以的话)。
3)然后输入数据scanf('%s ',p-stu 1 . age);
4)最后提醒学生,信息输入完整!
5)现在只输入了一个学生信息。这时候你只需要在main函数中写一个循环就可以无限调用这个函数进行数据录入。
void输入(){
Printf('请输入学生信息\ t \ n ');
Node * pNewNode=(Node *)malloc(sizeof(Node));//创建一个新节点。
pNewNode-pNext=NULL;
if(g_head==NULL){
g _ head=pNewNode
}
否则{
pNewNode-pNext=g _ head;
g _ head=pNewNode
}
Printf('请输入您的姓名:');
scanf('%s ',pNewNode-stu 1 . name);
Printf('请输入年龄:');
scanf('%d ',pNewNode-stu 1 . age);
Printf('请输入您的学号:');
scanf('%d ',pNewNode-stu 1 . stunum);
Printf('请输入等级:');
scanf('%d ',pNewNode-stu 1 . score);
Printf('学生信息已输入!\ n \ n’);
}
查看信息:
1)需要遍历链表,然后打印f;
2)创建一个新的节点指针然后Node * p=g _ head而(p!=NULL){ printf p=p-next}(注:以上代码仅为函数描述)
代码:
void printdate(){
Node * p=g _ head
printf(' \ tName \ tAge \ t student ID \ tachievent \ n ');
而(p!=空)
{
printf('\t%s\t,%d\t,%d\t,%d\t\n ',p-stu1.name,p-stu1.age,p-stu1.stuNum,p-stu 1 . score);
p=p-pNext;
}
}
保存信息:
1)首先用文件指针指向要使用的文件,
2)方便所有链表数据,将遍历的数据写入文件指针指向的文件。
void save(){
FILE *fp=fopen('E:\\stu.data ',' w ');
if(fp==NULL){
Printf('文件打开失败');
返回;
}
Node * p=g _ head
而(p!=NULL){
fwrite(p-stu1,1,sizeof(学生),FP);
p=p-pNext;
}
fclose(FP);
Printf('文件保存成功!\ n’);
}
文件读取:
1)首先用文件指针指向一个使用过的文件,
2)这里,需要打开一个链表,将读取的数据写入链表中数据的结构中,
3)你需要判断是否读取了数据,先将文件中的数据读入结构数组。
4)然后在while循环中,将结构数组中的数据复制到链表中,
5)每个节点都需要排队。这里使用了头插入方法,每个副本都会打开一个节点。
代码:
void rs(){
FILE* fp=fopen('E:\\stu.data ',' r ');
if(fp==NULL){
Printf('文件打开失败');
}
printf('文件已成功读取!\n要查看文件,请按2 \ n’);
学生stu
while(fread(stu,1,sizeof(student),fp)){
Node * pNewNode=(Node *)malloc(sizeof(Node));
pNewNode-pNext=NULL;
memcpy(pNewNode,stu,sizeof(student));
if(g_head==NULL){
g _ head=pNewNode
}
否则{
pNewNode-pNext=g _ head;
g _ head=pNewNode
}
}
}
统计人数:
1)遍历链表时,定义一个整数数组来添加最终输出。
无效计数(){
int a=0;
FILE* fp=fopen('E:\\stu.data ',' r ');
if(fp==NULL){
Printf('文件打开失败');
返回;
}
Node * p=g _ head
而(p!=NULL){
p=p-pNext;
a;
}
Printf('总数%d ',a);
}
查找学生:
(1)定义整型数据,输入学号,先遍历再如果是判断输入的学号和p-斯图一号是否相等,相等的话输出:
请参阅查找()
内部编号;
printf('请输入要查找的学生学号:\ n);
扫描文件(" %d,num ");
节点* p=g_head:
而(p!=空)
如果(p-stu 1。Sturm==num)}
printf(\ t % s \ t,%d\t,%d\t,%d\t\n),p-stu1.name,p-stu1.age,p-stu1。斯特姆,p-stu 1。分数;
}
p=p-pnext;
}
printf('无该学生信息');
}
修改信息:美元
(1)定义整型数据,输入学号,先遍历再如果是判断输入的学号和p-斯图一号是否相等,相等的话重新输入:
请参见更改()
内部编号;
printf('请输入要修改的学生的学号");
扫描文件(" %d,num ");
节点* p=g_head:
而(p!=空)
如果(p-stu 1。Sturm==num)}
printf('请输入姓名:\ n);
扫描f("% s ",p-stu 1。姓名);
printf('请输入年龄:\ n);
scanf("% d,p-stu 1。年龄”);
printf('请输入学号:\ n);
scanf(% d,p-stu 1。Sturm);
printf('请输入成绩:\ n);
scanf("% d,p-stu 1。分数”);
printf('信息更改完毕我的天);
}
p=p-pnext;
}
if(p==null)}
printf('该学生不存在!\ n ';
}
}
删除信息:美元
(1)思路是先遍历,找到了免费的就可以了,
(2)需要定义两个节点指针,如果找到了是头结点直接将头结点付给定义的节点,然后免费的,
如果不是头结点,将该节点付给定义的节点,p-next=p-next;
然后免费的
S7-1200可编程控制器
内部编号;
printf('请输入要删除的学号');
扫描文件(" %d,num ");
节点* p=g_head:
节点*p1 、* p2
如果(p-stu 1。Sturm==num)}
P1=p-p next;
自由(p-1);
}
if(p-pNext!=空)
p2=p-pnext;
p-pnext=p-pnext-pnext;
自由(p-2);
}
printf('学号为%d的信息删除成功!\n,编号;
}
下面是完整代码:
# includestdio.h
#includeconio。h
#includestdlib.h
#includestring.h
typedef结构_学生
茶名称[20];
(同Internationalorganizations)国际组织年龄;
内部斯特姆;
(同Internationalorganizations)国际组织分数;
}学生;
typedef结构节点
学生stu 1;
struct _Node* pNext:
}节点;
Node *g_head=NULL:
请参阅菜单()
printf("-\ n ");
打印(1录入信息-\ n ';
打印(2查看信息-\ n ';
打印(3保存信息-\ n ';
打印(4读取信息-\ n ';
打印(5统计人数-\ n ';
打印(6查找信息-\ n ';
打印(7修改信息-\ n ';
printf(-8删除信息-\ n ';
打印(0退出-\ n ';
printf('退出不要直接点叉,请按0退出!\n查看文件之前请先读取文件!\ n ';
}
请参见输入()
printf('请输入学生信息\ t \ n ';
node * pnewnode=(node *)malloc(sizeof(node));//创建一个新节点。
pnewnode-pnext=null;
if(g_head==NULL)>
S7-1200可编程控制器:
}
其他
pnewnode-pnext=g _ head;
S7-1200可编程控制器:
}
printf('请输入姓名");
scanf("% s ",pnewnode-stu 1。姓名);
printf('请输入年龄");
scanf("% d ",pnewnode-stu 1。年龄);
printf('请输入学号");
scanf("% d ",pnewnode-stu 1。Sturm);
printf('请输入成绩");
scanf("% d ",pnewnode-stu 1。分数);
printf('该学生信息输入完毕!\ n \ n ';
}
请参见打印日期()
节点* p=g_head:
printf("\ t姓名\t年龄\t学号\t成绩\ n ';
而(p!=空)
{
printf(\ t % s \ t,%d\t,%d\t,%d\t\n),p-stu1.name,p-stu1.age,p-stu1。斯特姆,p-stu 1。分数;
p=p-pnext;
}
}
请参阅保存()
文件*fp=fopen('E:\\stu.data ',' w ');
if(FP==null)}
printf('文件打开失败');
返回;
}
节点* p=g_head:
而(p!=空)
fwrite(p-stu 1.1,sizeof(学生),FP);
p=p-pnext;
}
fclose(FP);
printf('文件保存成功!\ n ';
}
请参见rs()
文件* fp=fopen('E:\\stu.data ',' r ');
if(FP==null)}
printf('文件打开失败');
}
printf('文件读取成功!\n查看文件请按2 \ n ';
学生斯图;
while(fread(stu,1,sizeof(student,FP))& gt;
node * pnewnode=(node *)malloc(sizeof(node));
pnewnode-pnext=null;
memcpy(pNewNode,stu,sizeof(学生));
if(g_head==NULL)>
S7-1200可编程控制器:
}
其他
pnewnode-pnext=g _ head;
S7-1200可编程控制器:
}
}
}
请参见计数()
内部a=0
文件* fp=fopen('E:\\stu.data ',' r ');
if(FP==null)}
printf('文件打开失败');
返回;
}
节点* p=g_head:
而(p!=空)
p=p-pnext;
(一)在下列情况下:
}
printf('总人数%d,a。
}
请参阅查找()
内部编号;
printf('请输入要查找的学生学号:\ n’);
scanf('%d ',编号);
节点* p=g _ head
而(p!=NULL){
if(p-stu1.stuNum==num){
printf('\t%s\t,%d\t,%d\t,%d\t\n ',p-stu1.name,p-stu1.age,p-stu1.stuNum,p-stu1。分数);
}
p=p-pNext;
}
printf(' have not ');
}
无效更改(){
整数
printf('请输入要修改的学生的学号: ');
scanf('%d ',编号);
节点* p=g _ head
而(p!=NULL){
if(p-stu1.stuNum==num){
printf('请输入姓名:\ n’);
扫描f('%s ',p-stu 1。姓名);
printf('请输入年龄:\ n’);
扫描f('%d ',p-stu 1。年龄);
printf('请输入学号:\ n’);
扫描f('%d ',p-stu 1。stunum);
printf('请输入成绩:\ n’);
扫描f('%d ',p-stu 1。分数);
printf('信息更改完毕!');
}
p=p-pNext;
}
if(p==NULL){
printf('该学生不存在!\ n’);
}
}
void del(){
整数
printf('请输入要删除的学号');
scanf('%d ',编号);
节点* p=g _ head
节点*p1,* p2
if(p-stu1.stuNum==num){
P1=p-p next;
免费(P1);
}
if(p-pNext!=NULL){
p2=p-pNext;
p-pNext=p-pNext-pNext;
免费(p2);
}
printf('学号为%d的信息删除成功!\n ',编号);
}
int main()
{
menu();
while(1)
{
char ch=getch();
开关(通道){
事例"1":输入();打破;
事例“2”:打印日期();打破;
案例“3”:save();打破;
案例“4”:RS();打破;
事例“5”:count();打破;
案例“6”:find();打破;
事例“7”:change();打破;
案例“8”:del();打破;
案例"0":退出(0);
}
}
返回0;
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。