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.实现的删除,其实就是利用算法实现的
以上纯属本人见解,如有问题请联系本人!