C语言代码:编写简单的学生管理系统。(指针版)

设置登录密码,登录学生管理系统,实现的功能一共有七个:1.添加学生信息,2.删除学生信息,3.修改学生信息,4.查看单个学生信息,5.学生信息排序,6.遍历学生信息,7.插入学生信息。

首先定义结构体,里面包含5个信息,学生姓名,学号,性别,年龄,成绩。

//学生信息结构体 
struct Stu{
    char name[20];
    int id;
    int age;
    int sex; //性别
    float score;    
};//数据域 

定义结构体指针
//节点结构体 
struct Node{
    struct Stu student; //数据 
    struct Node *next;  //指针指向下一空间 
}; 

完善了登录系统,设置密码,具体实现代码如下所示:

int main()
{
    int i=0,f=0;
    char mima[20]={"666666"};   //密码可以直接设定,也可以手动输入设置密码 
    char password[20] = {0};   
    for (i = 0; i < 3; i++)        
    {
        f++;
        printf("请输入密码:");
        scanf("%s",password);     //字符串类型%s,数组就是一个地址,不用取地址&
       
        if (0 == strcmp(password,mima))  //strcmp函数比较两个字符串,相同返回0,不相同返回1
        { 
            程序段1;

             ...........
         }
         else 
        {
            printf("密码输入错误,您还有%d次输入机会!\n",3-f);
        }
    }
    //输入密码完成后,判断输入的次数是否小于等于三次
    if (i < 3)
    {
        printf("登录成功\n");
    }
    else
    {
        printf("退出程序\n");
    }
    return 0; 
}

完整实现代码如下所示:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//学生信息结构体 
struct Stu{
	char name[20];
	int id;
	int age;
	char sex[2]; //性别
	float score;	
};//数据域 
//节点结构体 
struct Node{
	struct Stu student; //数据 
	struct Node *next;  //指针指向下一空间 
}; // 指针域 
enum Tag{quit,add,del,change,find,rank,print,charu}; 
int count;
void menu();                       //菜单
void Add(struct Node *head);       //1.添加学生信息
void Del(struct Node *head);       //2.删除学生信息
void Change(struct Node *head);    //3.修改学生信息
void Find(struct Node *head);      //4.查看单个学生信息
void Rank(struct Node *head);      //5.学生信息排序
void Print(struct Node *head);     //6.遍历学生信息
void Charu(struct Node *head);     //7.插入学生信息
int main()
{
	int i=0,f=0;
	char mima[20]={"666666"};  //密码可以直接设定,也可以手动输入设置密码 
	char password[20] = {0};   
	for (i = 0; i < 3; i++)        
	{
	    f++;
		printf("请输入密码:");
		scanf("%s",password);     
       
		if (0 == strcmp(password,mima))
		{ 
			struct Node *head = (struct Node *)malloc(sizeof(struct Node)); //给头结点head创建一个节点空间
			memset(head,0,sizeof(struct Stu)); //初始化节点
			head->next = NULL;
	
			while(1)
			{
				int num;
				menu();
				printf("请输入要执行的操作!\n");
				scanf("%d",&num);
				switch(num)
				{
					case add:
						Add(head);
						break; 
					case del:
						Del(head);
						break; 
					case change:
						Change(head);
						break; 
					case find:
						Find(head);
						break;
					case rank:
						Rank(head);
						break;
					case print:
						Print(head);
						break;
					case charu:
						Charu(head);
						break;
					case quit:
						return 0;
					default:printf("输入有误,请重新输入!\n");
				}
			 }
		 }
		 else 
		{
			printf("密码输入错误,您还有%d次输入机会!\n",3-f);
		}
	}
	
	if (i < 3)
	{
		printf("登录成功\n");
	}
	else
	{
		printf("退出程序\n");
	}
	return 0; 
}

//学生管理系统菜单
void menu()
{
	printf("*********欢迎来到学生管理系统*********\n");
	printf("*********1.添加学生信息*********\n");
	printf("*********2.删除学生信息*********\n");
	printf("*********3.修改学生信息*********\n");
	printf("*********4.查看单个学生信息*********\n");
	printf("*********5.学生信息排序*********\n");
	printf("*********6.遍历学生信息*********\n");
	printf("*********7.插入学生信息*********\n");
	printf("*********0.退出学生管理系统*********\n");

}
//1.添加学生信息
void Add(struct Node *head)
{
	int n,m;
loop:
	printf("请输入要添加的学号!\n");
	scanf("%d",&n);
	struct Node *temp = head->next;
	while(temp != NULL)
	{
		if(n == temp->student.id)
		{
			printf("该学号已存在!\n");
			return;//无返回值
		}
		temp = temp->next ;
	}
	struct Node *new1 = (struct Node *)malloc(sizeof(struct Node));
	new1->student.id  = n;
	printf("请输入要添加的学生姓名!\n");
	scanf("%s",new1->student.name);
	
	printf("请输入要添加的学生性别!\n");
	scanf("%s",new1->student.sex);
	
	printf("请输入要添加的学生的年龄!\n");
	scanf("%d",&new1->student.age);
	
	printf("请输入要添加的学生成绩!\n");
	scanf("%f",&new1->student.score);
	new1->next =NULL;
	
	temp = head;
	while(temp->next != NULL)
	{
		temp = temp->next ;
	}
	temp->next = new1;
	count++;
	printf("该学生信息添加成功!\n");
	printf("是否要继续添加? 是......1,否......2\n");
	scanf("%d",&m);
	if(m == 1)
	{
		goto loop;
	}
	else if(m == 2)
	{
		return;
	}
}

//2.删除学生信息
void Del(struct Node *head)
{	
	struct Node *temp1 = head;
	struct Node *temp2 = head->next;
	int n,m;
	int i,j;
	printf("请输入要删除学生的学号!\n");
	scanf("%d",&n);
	printf("请认真考虑是否要删除? 是......1,否......2\n");
	scanf("%d",&m);
	if(m == 1)
	{
		while(temp2 != NULL)
		{
			if(n == temp2->student.id)
			{
				temp1->next =temp2->next;
			}
			temp1 = temp1->next ;
			temp2 = temp2->next ;
		}
		free(temp2);
		count--;
		printf("删除成功!\n");
	}
	else if(m == 2)
	{
		return;
	}
	
}
//3.修改学生信息
void Change(struct Node *head)
{
	struct Node *temp = head;
	int n;
	printf("请输入要修改学生的学号!\n");
	scanf("%d",&n);
	while(temp != NULL)
	{
		if(n == temp->student.id)
		{
			printf("请输入要修改学生的姓名!\n");
			scanf("%s",temp->student.name);
			
			printf("请输入要修改的学生性别!\n");
			scanf("%s",temp->student.sex);
			
			printf("请输入要修改的学生的年龄!\n");
			scanf("%d",&temp->student.age);
			
			printf("请输入要修改学生的成绩!\n");
			scanf("%f",&temp->student.score);
		}
		temp = temp->next ;
	}
}
//4.查看单个学生信息
void Find(struct Node *head)
{
	struct Node *temp = head;
	int n,num;
	char str[20]= {0};
	int flag = 0;
	printf("**********请选择查询方式!***********\n");
	printf("**********1.通过学号***********\n");
	printf("**********2.通过姓名***********\n");
	printf("*******************************\n");
	scanf("%d",&num);
	if(num == 1)
	{
		printf("请输入要查看学生的学号!\n");
		scanf("%d",&n);
		while(temp != NULL)
		{
			if(n == temp->student.id)
			{
				flag = 1;
				printf("该学生信息为:\n");
				printf("学号\t姓名\t性别\t年龄\t成绩\n");
				printf("%d\t%s\t%s\t%d\t%f\n",temp->student.id,temp->student.name,temp->student.sex,temp->student.age,temp->student.score);	
			}
			temp = temp->next ;
		}
	}		
	else if(num == 2)
	{
		printf("请输入要查看学生的姓名!\n");
		scanf("%s",str);
		while(temp != NULL)
		{
			if(0 ==strcmp(str,temp->student.name))
			{
				flag = 1;
				printf("该学生信息为:\n");
				printf("学号\t姓名\t性别\t年龄\t成绩\n");
				printf("%d\t%s\t%s\t%d\t%f\n",temp->student.id,temp->student.name,temp->student.sex,temp->student.age,temp->student.score);	
			}
			temp = temp->next ;
		}
	}
	
	if(flag == 0)
	{
		printf("查无此人,返回主菜单!\n");
	}
	
}
//5.学生信息排序
void Rank(struct Node *head)
{
	struct Node *temp=head->next;
    struct Node *temp1=head->next;
    struct Node *temp2;
    struct Stu stu;
    printf("按成绩由高到低排序为:\n");
    for(;temp1->next !=NULL;temp1=temp1->next)
    {
        for(temp2 = temp1->next; temp2 !=NULL; temp2=temp2->next)
        {
            if(temp1->student.score < temp2->student.score)
            {
                stu=temp1->student;
                temp1->student=temp2->student;
                temp2->student=stu;
            }
         }   
     }
    printf("学号\t姓名\t性别\t年龄\t成绩\n");
	while(temp != NULL)
	{
		printf("%d\t%s\t%s\t%d\t%f\n",temp->student.id,temp->student.name,temp->student.sex,temp->student.age,temp->student.score);	
		temp = temp->next;
	}
}

//6.遍历学生信息
void Print(struct Node *head)
{
	printf("共有%d个学生信息\n",count);
	printf("学号\t姓名\t性别\t年龄\t成绩\n");
	struct Node *temp = head->next;
	while(temp != NULL)
	{
		printf("%d\t%s\t%s\t%d\t%f\n",temp->student.id,temp->student.name,temp->student.sex,temp->student.age,temp->student.score);	
		temp = temp->next;
	}
}
//7.插入学生信息
void Charu(struct Node *head)
{	
	struct Node *temp = head->next;
	int n,flag = 0;
	printf("请输入想要插入的学号后边!\n"); 
	scanf("%d",&n);
	while(temp != NULL)
	{
		if(n == temp->student.id)
		{
			flag = 1;
			struct Node *new2 = (struct Node *)malloc(sizeof(struct Node));
			printf("请输入要插入的学生学号!\n");
			scanf("%d",&new2->student.id);
			printf("请输入要插入的学生姓名!\n");
			scanf("%s",new2->student.name);
			
			printf("请输入要插入的学生性别!\n");
			scanf("%s",new2->student.sex);
			
			printf("请输入要插入的学生年龄!\n");
			scanf("%d",&new2->student.age);
			
			printf("请输入要插入的学生成绩!\n");
			scanf("%f",&new2->student.score);
			
			new2->next = temp->next ;
			temp->next = new2;
			printf("该学生信息插入成功!\n");
            count++;
		}	
		temp = temp->next ;
	}
	
	
	if(flag == 0)
	{
		printf("没有此学生,插入错误!\n");
		return; 
	}

	return; 
} 


运行结果如下图所示:

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是不使用指针学生成绩管理系统C语言的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_STUDENT_NUM 100 // 最大学生数 // 学生结构体 typedef struct { char name[20]; // 姓名 int id; // 学号 float score; // 成绩 } Student; // 学生数组 Student students[MAX_STUDENT_NUM]; // 学生数量 int studentCount = 0; // 添加学生 void AddStudent() { if (studentCount >= MAX_STUDENT_NUM) { printf("学生数量已达到上限,无法添加!\n\n"); return; } Student student; printf("请输入学生姓名:"); scanf("%s", student.name); printf("请输入学生学号:"); scanf("%d", &student.id); printf("请输入学生成绩:"); scanf("%f", &student.score); students[studentCount] = student; studentCount++; printf("添加成功!\n\n"); } // 删除学生 void DeleteStudent() { int id; printf("请输入要删除的学生学号:"); scanf("%d", &id); int index = -1; for (int i = 0; i < studentCount; i++) { if (students[i].id == id) { index = i; break; } } if (index == -1) { printf("未找到该学生,删除失败!\n\n"); return; } for (int i = index; i < studentCount - 1; i++) { students[i] = students[i + 1]; } studentCount--; printf("删除成功!\n\n"); } // 修改学生信息 void ModifyStudent() { int id; printf("请输入要修改的学生学号:"); scanf("%d", &id); int index = -1; for (int i = 0; i < studentCount; i++) { if (students[i].id == id) { index = i; break; } } if (index == -1) { printf("未找到该学生,修改失败!\n\n"); return; } Student student; printf("请输入学生姓名:"); scanf("%s", student.name); printf("请输入学生学号:"); scanf("%d", &student.id); printf("请输入学生成绩:"); scanf("%f", &student.score); students[index] = student; printf("修改成功!\n\n"); } // 查找学生信息 void FindStudent() { int id; printf("请输入要查找的学生学号:"); scanf("%d", &id); int index = -1; for (int i = 0; i < studentCount; i++) { if (students[i].id == id) { index = i; break; } } if (index == -1) { printf("未找到该学生!\n\n"); return; } printf("姓名:%s\n", students[index].name); printf("学号:%d\n", students[index].id); printf("成绩:%f\n\n", students[index].score); } // 显示所有学生信息 void ShowAllStudents() { printf("学生总人数:%d\n", studentCount); printf("姓名\t学号\t成绩\n"); for (int i = 0; i < studentCount; i++) { printf("%s\t%d\t%f\n", students[i].name, students[i].id, students[i].score); } printf("\n"); } // 统计所有学生人数 void CountStudent() { printf("学生总人数:%d\n\n", studentCount); } int main() { int choice; while (1) { printf("请选择操作:\n"); printf("1.添加学生\n"); printf("2.删除学生\n"); printf("3.修改学生信息\n"); printf("4.查找学生信息\n"); printf("5.显示所有学生信息\n"); printf("6.统计所有学生人数\n"); printf("0.退出程序\n"); scanf("%d", &choice); switch (choice) { case 1: AddStudent(); break; case 2: DeleteStudent(); break; case 3: ModifyStudent(); break; case 4: FindStudent(); break; case 5: ShowAllStudents(); break; case 6: CountStudent(); break; case 0: printf("程序已退出!\n"); return 0; default: printf("无效的选择,请重新输入!\n\n"); break; } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程小白菜123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值