C++第一节课,老师给我们留了个作业,用C语言实现学生管系统。
要求实现:增删改查(包含文件操作)
本学渣就腆着脸发出来了。简单小程序。C语言初学的一点小应用
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define F_PATH "D:\\a\\info.dat"
typedef struct st_info {
char number[10];
int sex;
char name[20];
char native_place[10];
int birth[3];
struct st_info *next;
}info;
typedef info *point;
void menu0();
void menu1();
void wr(point head);
point create(void);
point find(point head, point comp);
point del(point head);
void addition(point head);
void modify(point head);
void search(point head);
int main(void)
{
int i;
point head;
head = NULL;
menu0();
head=create();
menu1();
scanf("%d", &i);
while (i==1||i==2||i==3||i==4||i==5)
{
if (i == 1) addition(head);
if (i == 2) head = del(head);
if (i == 3) modify(head);
if (i == 4) search(head);
if (i == 5) wr(head);
printf("如还需完成其他操作,\n请再次输入数字,否则请直接输入数字5退出\n");
scanf("%d", &i);
}
return 0;
}
void menu0(void)
{
printf("********************************************\n");
printf("***********欢迎使用学生管理系统*************\n");
printf("***********以下是系统的使用菜单*************\n");
printf("**********正在载入已储存学生信息************\n");
}
void menu1(void)
{
printf("*------------*-*-*-****-*-*-*--------------*\n");
printf("**************1.增加学生信息****************\n");
printf("**************2.删除学生信息****************\n");
printf("**************3.修改学生信息****************\n");
printf("**************4.查找学生信息****************\n");
printf("*************5.储存修改并退出***************\n");
printf("********请按照你的需求输入相应的数字********\n");
printf("*********如果有过信息修改请一定保存*********\n");
printf("********************************************\n");
};
point create(void)//初始化读取文件信息函数
{
FILE *fp;
int flag, i;
point cr, use,head;
head = NULL;
use = NULL;
flag = 1;
fp = fopen(F_PATH, "ab+");
while(1)
{
cr = (info*)malloc(sizeof(info));
cr->next = NULL;
fscanf(fp, "%s", cr->name);
fseek(fp, 1L, SEEK_CUR);
fscanf(fp, "%d", &cr->sex);
fseek(fp, 1L, SEEK_CUR);
fscanf(fp, "%s", cr->native_place);
fseek(fp, 1L, SEEK_CUR);
for (i = 1; i <= 3; i++) fscanf(fp, "%d", &cr->birth[i - 1]);
fscanf(fp, "%s", cr->number);
if(flag==1) {
head = cr;
use=cr;}
else
{
use->next=cr;
use=use->next;
}
flag++;
if (feof(fp)) break;
}
fclose(fp);
return head;
}
void wr(point head)//信息再次储存函数
{
point c;
FILE *fp;
int flag = 0;
c = head;
fp = fopen(F_PATH, "w");
while (head)
{
fprintf(fp, "%s %d %s %d %d %d", head->name, head->sex, head->native_place, head->birth[0], head->birth[1], head->birth[2]);
if(head->next) fputc('\n', fp);
head = head->next;
free(c);
c = head;
}
}
void addition(point head)//增加函数
{
point b;
b = (info*)malloc(sizeof(info));
b->next = head->next;
head->next = b;
printf("请输入要插入学生的姓名\n");
{
scanf("%s", b->name);
}
printf("请输入要插入学生的性别(男1女0)\n");
{
scanf("%d", &b->sex);
}
printf("请输入要插入学生的籍贯\n");
{
scanf("%s", b->native_place);
}
printf("请按格式(XXXX-X-X)\n");
{
scanf("%d-%d-%d", &b->birth[0], &b->birth[1], &b->birth[2]);
}
printf("输入要插入的学生学号\n");
{
scanf("%s", b->number);
}
printf("谢谢使用,学生信息已录入\n");
}
point find(point head,point comp) //查找核心功能
{
printf("请输入学生的学号");
char re[10];
int a;
point s;
s = head;
scanf("%s", re);
a = 0;
while (s)
{
if (!strcmp(re, s->number)) {
comp = s;
break;
}
s = s->next;
}
return comp;
}
void search(point head)//查找函数
{
point s;
int i;
s = NULL;
s = find(head,s);
if (s!=NULL) {
printf("查得该学生,是否需要查看该学生信息,需要请输入1,不需要请输入0\n");
scanf("%d", &i);
if (i == 0) {
printf("该学生的姓名为%s\n", s->name);
if (s->sex) printf("该人为男\n");
else printf("性别为女\n");
printf("籍贯为%s\n", s->native_place);
printf("生日为%d年%d月%d日\n", s->birth[0], s->birth[1], s->birth[2]);
}
}
else
{
printf("查无此人,也可能是学号输入错误,如有疑问可以再次查询") ;
}
}
point del(point head)// 删除函数
{
printf("请输入要删除的学号");
char re[10];
int a;
point s,q;
s = q = head;
scanf("%s", re);
a = 0;
if (!strcmp(re, s->number))
{
head = head->next;
return head;
}
else
{
s = s->next;
}
while (s)
{
if (!strcmp(re, s->number))
{
a = 1;
break;
}
q = s;
s = s->next;
}
if (a)
{
q->next = s->next;
free(s);
}
if (a==0)
{
printf("在查找的过程中别没有查找到这个人,请尝试重新操作,也有可能是该学生信息已经被删除\n");
}
return head;
}
void modify(point head)//修改函数
{
printf("请输入想要修改的学生现在最后一次储存的学号");
point comp;
comp = NULL;
comp = find(head,comp);
if (comp!=NULL) {
printf("请输入你想要修改的学生的信息选项:\n*1.修改学号*\n*2.修改姓名*\n*3.修改籍贯*\n*4.修改生日*\n*(PS:由于法律,性别暂无法修改)*");
int a;
scanf("%d", &a);
if (a == 1) {
char m[10];
printf("请输入学号\n");
scanf("%s", m);
memset(comp->number, 0, 10 * sizeof(char));
comp->number[0] = '\0';
strcpy(comp->number, m);
}
else if (a==2)
{
char m[20];
printf("请输入姓名\n");
scanf("%s", m);
memset(comp->name, 0, 20 * sizeof(char));
comp->name[0] = '\0';
strcpy(comp->name, m);
}
else if (a==3)
{
char m[20];
printf("请输入籍贯\n");
scanf("%s", m);
memset(comp->native_place, 0, 20 * sizeof(char));
comp->native_place[0] = '\n';
strcpy(comp->native_place, m);
}
else if (a==4)
{
int m;
printf("请输入性别,男请输入1,女输入2\n");
scanf("%d", &m);
comp->sex = m;
}
else
{
printf("您输入有误,如有需要,请重试\n");
}
}
else
{
printf("对不起,你输入的学号信息有误,请重试\n");
}
}