c语言学生成绩管理系统数据库,用C语言实现简单的学生数据库管理系

##    用C语言实现简单的学生数据库管理系

**项目概述**

用C语言的结构体、指针、文件操作以及块的读写实现链式学生数据库存储,可以完成数据库的增、删、改、查以及数据根据学号有序排列功能等。

****实现流程****

函数声明

```

#include

#define path "F:\\桌面\\student.dat"

struct student{

char name[20];

int num;

int age;

char sex[4];

struct student *next;

};

void  main_window();

void look_student(struct student *head);

void add_student(struct student *head);

void del_student(struct student *head);

void update_student(struct student *head);

void check_order(struct student *head);

void wirte_data(struct student *head);

void read_data(struct student *head);

struct student *create_student(int num);

struct student *new_data();

```

1. 主界面实现

![在这里插入图片描述](

thread-1183723-1-1.html?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxOTYxODgx,size_16,color_FFFFFF,t_70)

如图该系统就五个命令,增删改查以及系统退出命令。

```

void  main_window(){

printf("*********************欢迎进入学生管理系统**********************\n");

printf("操作命令:\n");

printf("添加学生信息:1\n删除学生信息:2\n查找学生信息:3\n更新学生信息:4\n退出系统:0\n");

}

```

2. 实现命令循环接收,每次接收命令前先读取数据文件,然后执行命令写入数据文件

```

void main(){

struct student *head=NULL;

head=malloc(sizeof(struct student ));

head->next=NULL;

main_window();

while(1){

read_data(head);

check_order(head);

wirte_data(head);

}

}

```

```

void check_order(struct student *head){

int order;

printf("请输入命令:");

scanf("%d",&order);

if(order==0){

printf("您已经成功退出系统!谢谢使用!\n");

exit();

}

if(order==1){

printf("请开始添加学生\n");

add_student(head);

return;

}

if(order==2){

del_student(head);

return;

}

if(order==3){

look_student(head);

return;

}

if(order==4){

update_student(head);

return;

}

printf("您输入的命令有误!请重新输入:\n");

}

```

3、实现增删查改功能

```

void add_student(struct student *head){//排序插入

struct student *p1=NULL,*p2=NULL;

int num;

printf("请输入学号:");

p2=head->next;

scanf("%d",&num);

//char name[10];

if(p2==NULL){

p1=create_student(num);

p1->next=NULL;

head->next=p1;

printf("学生:%d添加成功!\n",num);

return;

}

while(p2){

if(p2->num==num){

printf("该学号已经有学生!\n");

return;

}

if(((head->next)->num)>num&&p2==head->next){

p1=create_student(num);

p1->next=head->next;

head->next=p1;

printf("学生:%d添加成功!\n",num);

return;

}

if((p2->next!=NULL)&&(p2->numnext)->num>num)){

p1=create_student(num);

p1->next=p2->next;

p2->next=p1;

printf("学生:%d添加成功!\n",num);

return;

}

if(p2->next==NULL){

p1=create_student(num);

p1->next=NULL;

p2->next=p1;

printf("学生:%d添加成功!\n",num);

return;

}

p2=p2->next;

}

}

void del_student(struct student *head){

struct student *p1=NULL,*p2=NULL;

int num;

p2=head->next;

if(p2==NULL){

printf("数据库中没有学生!\n");

return;

}

printf("请输入要删除学生的学号:");

scanf("%d",&num);

//char name[10];

while(p2){

if(((head->next)->num)==num){//删除头数据

p1=head->next;

head->next=p1->next;

free(p1);

printf("学生:%d删除成功!\n",num);

return;

}

if((p2->next!=NULL)&&((p2->next)->next!=NULL)&&(p2->next)->num==num){//删除中间数据

p1=p2->next;

p2->next=p1->next;

free(p1);

printf("学生:%d删除成功!\n",num);

return;

}

if((p2->next!=NULL&&(p2->next)->next==NULL&&(p2->next)->num==num)){//删除尾数据

p1=p2->next;

p2->next=NULL;

free(p1);

printf("学生:%d删除成功!\n",num);

return;

}

else{

printf("数据库中没有你要删除的学生!\n");

return;

}

p2=p2->next;

}

}

struct student *create_student(int num){

struct student *p;

p=malloc(sizeof(struct student));

printf("请输入姓名:");

scanf("%s",p->name);    //遇坑

p->num=num;

printf("请输入性别:");//遇坑

scanf("%s",p->sex);

printf("请输入年龄:");

scanf("%d",&p->age);

return p;

}

void look_student(struct student *head){

struct student *p1;

p1=head->next;

if(p1==NULL){

printf("抱歉,数据库没有学生信息!\n");

return;

}

printf("***********学生信息*************");

printf("\n*姓名*\t*学号*\t*性别*\t*年龄*\n");

printf("******************************\n");

do{

printf("%s\t%d\t%s\t%d\n",p1->name,p1->num,p1->sex,p1->age);

p1=p1->next;

}while(p1);

printf("******************************\n");

}

void update_student(struct student *head){

struct student *p1=NULL,*p2=NULL;

int num;

p2=head->next;

if(p2==NULL){

printf("数据库中没有学生!\n");

return;

}

printf("请输入要更新信息学生的学号:");

scanf("%d",&num);

while(p2){

if(p2->num==num){

printf("请输入修改姓名:");

scanf("%s",p2->name);    //遇坑

printf("请输入修改性别:");//遇坑

scanf("%s",p2->sex);

printf("请输入修改年龄:");

scanf("%d",&p2->age);

printf("学生:%d的信息修改成功!\n",num);

return;

}

p2=p2->next;

}

printf("没有该学生!\n");

}

```

4. 实现学生数据的从文件读与写

```

void wirte_data(struct student *head){//写数据入文件

struct student *p=NULL;

FILE *fp;

fp=fopen(path,"w");

p=head->next;

while(p){

fwrite(p,sizeof(struct student),1,fp);

p=p->next;

}

fclose(fp);

}

void read_data(struct student *head){//从文件中读出数据到有序链表

FILE *fp;

struct student *p=NULL,*q=NULL;

p=head;

fp=fopen(path,"r");

q=new_data();

while(fread(q,sizeof(struct student),1,fp)==1){

p->next=q;

p=p->next;

q=new_data();

}

fclose(fp);

}

```

成果图

![在这里插入图片描述](

thread-1183723-1-1.html?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxOTYxODgx,size_16,color_FFFFFF,t_70)

项目源码:

链接:https://pan.baidu.com/s/17TX0eDXVuXkphCDg_GpcpQ

提取码:nqpr

注意:如果没有student.dat这个文件可能会报错,可以手动创建

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值