C语言之自定义的学生管理系统

1.声明

当前内容用于本人学习和巩固C语言的,编写的一个基本的C语言的增删改查的demo(学生管理系统)

当前内容的作用,用于本人深度学习C语言的指针和结构的用法,以及排序操作

2.主体程序部分

/*
 * 当前内容用于使用当前的c语言实现一个基本的学生管理系统(基本的增删改查)
 * 创建时间:2020-04-10,完成时间2020-04-11
 */
 
 #include <stdio.h>
 #include <string.h>
 
 // 定义学生结构
 struct Student{
	unsigned int id;
	char name[50];
	char address[50];
 };
 void showBar();
 void showMenu();
 void doMain(struct Student students[]);
 int chooseMenuNum();
 void selectAllStudents(struct Student students[],int index);
 void printStudent(struct Student student);
 void updateStudent(int index,struct Student students[]);
 void insertStudent(int *index,struct Student students[]);
 void deleteStudent(int *index,struct Student students[]);
 void deleteSorted(int deleteIndex,int len,struct Student students[]);
 int main()
 {
	 struct Student students[50];//默认创建50个学生
	 showBar();// 启动显示菜单
	 students[0].id = 1;	 
	 strcpy(students[0].name,"张三");
	 strcpy(students[0].address,"张三家");
	 
	  students[1].id = 2;
	 strcpy(students[1].name,"李四");
	 strcpy(students[1].address,"李四家");
	 doMain(students);// 执行主程序
	 return 0;
 }
 
 void doMain(struct Student students[]){
	 int chooseNum;
	 int index = 2;
	 while(1)
	 {
		showMenu(); 
		chooseNum = chooseMenuNum();
		switch(chooseNum){
			case 1:
				selectAllStudents(students,index);// 查询所有的学生
				break;
			case 2:
				//printf("%d\n",index);
				insertStudent(&index,students);
				//index++;
				//printf("%d\n",index);
				break;
			case 3:
				updateStudent(index,students);
				break;
			case 4:
				deleteStudent(&index,students);
				break;
			default:
				break;
		}
		if(chooseNum==0){
			printf("感谢使用本系统,已退出!\n");
			break;
		}
	 }
 }
 void showBar()
 {
	 printf("######################################\n");
	 printf("#####欢迎使用单机版的学生管理系统#####\n");
	 printf("######################################\n");
 }
 
 void showMenu()
 {
	 printf("################【菜单】##################\n");
	 printf("##########【1】.查询所有学生##############\n");
	 printf("##########【2】.添加学生信息##############\n");
	 printf("##########【3】.修改学生信息##############\n");
	 printf("##########【4】.删除学生信息##############\n");
	 printf("##########【0】.退出######################\n");
	 printf("##########【请选择操作(0-4):】############\n");
 }
 
 int chooseMenuNum()
 {
	 int chooseNum;
	 while(1){
		 scanf("%d",&chooseNum);
		 if(chooseNum>=0 && chooseNum<=4){
			 break;
		 }else{
			 printf("请输入0-4之间的正确的数据\n");
		 }
	 }
	 return chooseNum;
 }
 
 // 查询所有学生
 void selectAllStudents(struct Student students[],int len)
 {
	 for(int i=0;i<len;i++){
		 printStudent(students[i]);
	 }
 }
 
 //输出单个学生的信息
 void printStudent(struct Student student)
 {
	 printf("用户编号:%d\t用户名:%s\t地址:%s\n",student.id,student.name,student.address);
 }
 
 //修改单个学生的信息
 void updateStudent(int len,struct Student students[])
 {
	 int updateIndex;
	 printf("请输入需要修改的学生编号!");
	 scanf("%d",&updateIndex);
	 if(updateIndex>0 && updateIndex<=len){
		 printf("是否修改当前用户名为【%s】的学生信息?(yes/no)\n",students[updateIndex-1].name);
		 char choose[20];
		 scanf("%s",choose);
		 if(strcmp(choose,"yes")==0){// 使用strcmp函数比较两个字符是否相同
			char name[50];
			char address[50];
			printf("请输入修改后的用户名:\n");
			scanf("%s",name);
			printf("请输入修改后的用户地址:\n");
			scanf("%s",address);
			strcpy(students[updateIndex-1].name,name);
			strcpy(students[updateIndex-1].address,address);
		 }else{
			 printf("已取消修改用户信息!\n");
		 }
		 
	 }else{
		 printf("输入的学生编号错误!\n");
	 }
	
 }
 //插入数据
 void insertStudent(int *index,struct Student students[]){
	 int insertIndex = *index;
	 //printf("当前的insertIndex = %d\n",insertIndex);
	 char name[50];
	 char address[50];
	 //printf("%d",*index);
	 printf("请输入需要添加的学生的姓名:\n");
	 scanf("%s",name);
	 printf("请输入需要添加的学生的地址:\n");
	 scanf("%s",address);
	 strcpy(students[insertIndex].name,name);
	 strcpy(students[insertIndex].address,address);
	 insertIndex++;
	 students[*index].id = insertIndex;
	 *index=insertIndex;
	 //printf("当前的insertIndex = %d",insertIndex);
	 
 }
 
 //删除数据
 void deleteStudent(int *index,struct Student students[]){
	 int deleteIndex ;
	 //printf("请输入需要删除的用户的编号:\n");
	 scanf("%d",&deleteIndex);
	 
	 if(deleteIndex>0 && deleteIndex<=*index){
		strcpy(students[deleteIndex-1].name,"");
		strcpy(students[deleteIndex-1].address,"");
		students[deleteIndex-1].id = deleteIndex;
		//并将其开始移动和整理当前的students(重新实现排序操作)
		deleteSorted(deleteIndex-1,*index,students);
		*index=*index-1;
	 }else{
		 printf("输入的学生编号错误!\n");
	 }
	 
 }
 
 // 删除排序
 void deleteSorted(int deleteIndex,int len,struct Student students[]){
	 //认为当前的index后面的就应该排序往前移,index+1移动到index+1
	 if(deleteIndex>len){
		 return;//什么都不做
	 }
	 printf("deleteIndex=%d,len=%d",deleteIndex,len);
	 // 否则从deleteIndex开始后面的数据全部往前移动,重新排序从删除的位置开始
	 for(int i=deleteIndex;i<len;i++){
		 students[i].id = students[i+1].id;
		 strcpy(students[i].name,students[i+1].name);
		 strcpy(students[i].address,students[i+1].address);
	 }
	 
 }
 

3.结果

主体界面
在这里插入图片描述
查询操作
在这里插入图片描述

添加操作

在这里插入图片描述
修改操作
在这里插入图片描述
删除操作
在这里插入图片描述

退出操作
在这里插入图片描述

4.总结

1.在c语言中需要通过定义结构struct的方式定义类(java中),c语言在使用函数的时候必须在main函数之前声明否则报错

2.数组默认就是传递指针,可以通过传递指针变量方式修改方法外的变量,例如int类型,传递用&int,接收使用*int,可以通过*int=*int+1方式修改传递进来和外面的值

3.使用结构数组的时候需要定义例如struct Student students[],在执行对数组的操作的时候,需要知道数组的长度,和当前需要操作的下标

4.实现的删除,其实就是利用算法实现的

以上纯属本人见解,如有问题请联系本人!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值