文档库

最新最全的文档下载
当前位置:文档库 > C语言大作业

C语言大作业


#include
using namespace std;

struct student {
int num; //序号
char name[20]; //姓名
char sex; //性别
char id[18]; //身份证号码
int score; //入学分数
char address[80]; //家庭住址
};

struct student stu[100]; //定义学生信息数组

void createfile(); //创建磁盘文件
void readinfo(); //读取磁盘上的学生文件
int direction(); //显示欢迎界面并返回用户选择
void choose(); //用户的操作选择
void search();
void modify(); //修改学生数据
void addition(struct student); //增加学生数据并传递给结构体
void deleteinfo(); //删除学生数据
void showinfo(struct student); //显示学生数据
void saveinfo(); //保存学生数据
void exitpro(); //退出程序的函数

int main() {
int user_operation_num; //用户输入的操作
int i; //用于操作结构体的循环索引

//将每一项的序号均赋值为零, 代表该位置尚未使用
for (i = 0; i < 100; i++)
stu[i].num = 0;

readinfo();

user_operation_num = direction();

//根据用户的选择调用相应的函数
switch (user_operation_num) {
case 1:
search();
break;
case 2:
addition(stu[0]);
break;
case 3:
modify();
break;
case 4:
deleteinfo();
break;
case 5:
exitpro();
break;
default:
choose();
break;
}

return 0;
}

int direction() {
int user_operation_num; //用户的基本函数操作选择
printf("-------------------------------------\n");
printf("|???????? 学生注册信息管理系统????? |\n");
printf("|?????????????????????????????????? |\n");
printf("|??????????????????? 作者: 赵剑???? |\n");
printf("-------------------------------------\n");
printf("\n\n"); //产生空行

printf("1查询 2增加 3修改 4删除 5退出\n");
printf("请输入需要进行的操作的序号: ");
scanf("%d", &user_operation_num);
return (user_operation_num);
}

void createfile() {
FILE * fp;

fp = fopen("studentdat", "wb");
if (fp == NULL) {
printf("读取文件信息发生错误\n");
exit(-1);
}
}

void choose() {
int user_operation_num; //用户的基本函数操作选择
printf("1查询 2增加 3修改 4删除 5保存 6退出\n");
printf("请输入需要进行的操作的序号:\n");
scanf("%d", &user_operation_num);

//根据用户的选择调用相应的函数
switch (user_operation_num) {
case 1:
search();
break;
case 2:
addition(stu[0]);
break;
case 3:
modify();
break;
case 4:
deleteinfo();
break;
case 5:
saveinfo();
break;
case 6:
exitpro();
break;
default:
choose();
break;
}
}

void readinfo() {
FILE *fp; //定义文件指针
fp = fopen("studentdat", "rb");
if (fp == NULL) //打开文件失败
{
createfile();
//exit(0);
} else {
int i;
for (i = 0; i < 100; i++)
fread(&stu[i], sizeof (struct student), 1, fp);
}
}

void search() {
int stu_num;
int i; //循环索引

printf("请输入

学生的序号: ");
scanf("%d", &stu_num);

for (i = 0; i < 100; i++) {
if (stu[i].num == stu_num) {
showinfo(stu[i]);
break;
}
}

//未搜索到数据时的提示
if (i == 100) //如果i等于100,说明在0到99项都没有找到符合的数据,即数据不存在
{
printf("未找到学生数据\n");
choose();
}
}

void modify() {
int stu_mod_num;
int i; //循环索引
struct student * p; //指向需要被修改的数据
int flag = 1; //寻找数据项成功与否的标记
char c;
printf("请输入需要修改学生的序号:\n");
scanf("%d", &stu_mod_num);

p = NULL;

//寻找需要修改的学生数据
for (i = 0; i < 100; i++) {
if (stu[i].num == stu_mod_num) {
flag = 2; //找到数据项
p = stu + i;
break; //当寻找到待修改的数据项时跳出循环
}
}

//未寻找到数据
if (p == NULL) {
printf("未搜寻到学生数据\n");
choose();
}

if (flag == 2) {
char stu_mod_name[20]; //姓名
char stu_mod_sex; //性别
char stu_mod_id[18]; //身份证号码
int stu_mod_score; //入学分数
char stu_mod_address[80]; //家庭住址
struct student * p; //指向结构体的指针

p = stu;

//从键盘读取学生数据
printf("请输入学生的姓名: ");
scanf("%s", stu_mod_name);
c = getchar();
printf("请输入学生的性别: ");
scanf("%c", &stu_mod_sex);
printf("请输入学生的身份证号码: ");
scanf("%s", stu_mod_id);
printf("请输入学生的入学分数:");
scanf("%d", &stu_mod_score);
printf("请输入学生的家庭住址: ");
scanf("%s", stu_mod_address);

//将键盘输入的数据传递到学生数据的结构体中
p->num = stu_mod_num;
strcpy(p->name, stu_mod_name);
p->sex = stu_mod_sex;
strcpy(p->id, stu_mod_id);
p->score = stu_mod_score;
strcpy(p->address, stu_mod_address);
}
choose();
}

void addition(struct student stu_add) {
int stu_add_num;
char stu_add_name[20]; //姓名
char stu_add_sex; //性别
char stu_add_id[18]; //身份证号码
int stu_add_score; //入学分数
char stu_add_address[80]; //家庭住址
int i; //循环索引
struct student * p; //指向结构体的指针
int flag = 1; //未找到重复数据时, flag = 1
char c;

p = stu;

//从键盘读取学生数据
printf("请输入学生的序号: ");
scanf("%d", &stu_add_num);
//查询重复数据
for (i = 0; i < 100; i++) {
if (p->num == stu_add_num) //找到重复数据
{
flag = 2;
printf("学生数据中有重复的序号\n");
choose();
break;
}
p++;
}

if (flag == 1) //未找到重复数据
{
printf("请输入学生的姓名: ");
scanf("%s", stu_add_name);
c = getchar(); //吸收换行符
printf("请输入学生的性别: ");
scanf("%c", &stu_add_sex);
c = getchar(); //吸收换行符
printf("请输入学生的身份证号码: ");
scanf("%s", stu_add_id);
printf("请输入学生的入学分数:");
scanf("%d", &stu_add_score);
printf("

请输入学生的家庭住址: ");
scanf("%s", stu_add_address);
}

//寻找未被使用的结构体数组
p = stu; //从结构体数组起始位置开始搜索
for (i = 0; i < 100; i++) {
p++;
if (p->num == 0)
break; //寻找到未被占用的位置即刻跳出循环, 指针指向该位置
}

//将键盘输入的数据传递到学生数据的结构体中
p->num = stu_add_num;
strcpy(p->name, stu_add_name);
p->sex = stu_add_sex;
strcpy(p->id, stu_add_id);
p->score = stu_add_score;
strcpy(p->address, stu_add_address);

printf("建立数据完毕\n");

choose(); //用户选择
}

void deleteinfo() {
int stu_del_num;
int i; //循环索引
struct student * p; //指向需要被删除的数据
int flag = 1;

p = NULL;

printf("请输入需要删除的学生的序号: ");
scanf("%d", &stu_del_num);

//寻找需要删除的学生数据
for (i = 0; i < 100; i++) {
if (stu[i].num == stu_del_num) {
flag = 2;
p = stu + i;
break; //当寻找到待删除的数据项时跳出循环
}
}

//未寻找到数据
if (p == NULL) {
printf("未搜寻到学生数据\n");
choose();
}

if (flag == 2) {
p->num = 0;
printf("删除学生数据完毕\n");
}
choose();
}

void saveinfo() //保存学生数据
{
FILE * fp;
int i;

fp = fopen("studentdat", "wb");
if (fp == NULL) {
printf("读取文件信息发生错误");
exit(0);
}

for (i = 0; i < 100; i++)
fwrite(&stu[i], sizeof (struct student), 1, fp);

printf("保存成功\n");

choose();
}

void showinfo(struct student stu_fnc) {
printf("序号: %d\n", stu_fnc.num);
printf("姓名: %s\n", stu_http://www.wendangku.net/doc/6a75793c376baf1ffc4fadbb.html);
printf("性别: %c\n", stu_fnc.sex);
printf("身份证号码: %s\n", stu_fnc.id);
printf("入学分数: %d\n", stu_fnc.score);
printf("家庭住址: %s\n", stu_fnc.address);

choose();
}

void exitpro() {
exit(0);
}