/*
? C语言课程设计任务书及指导书5
题目:学生管理系统设计
功能:学生管理系统设计,每个学生信息作为一条记录,包括姓名、学号、性别、出生年月、专业、班级、家庭地址、宿舍号码等。
系统要求实现以下功能:
1、输入功能:录入学生信息(包括学生学号、姓名、性别、出生年月、专业等);
2、显示功能:完成学生记录的显示。
3、查找功能:完成按学号或姓名查找学生的相关记录,并显示。
分步实施:1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数。2、完成信息的录入和显示(即通过编程创建文件,输入学生信息并可将文件内容显示出来)3、完成修改功能,即输入学号,可修改该学生的信息4、进一步要求,在使用修改功能时要求输入密码,密码正确才能修改信息否则不行。
要求:1、用C语言实现程序设计;
2、利用结构体数组、链表等实现学生信息表达、查询等,充分体现数据结构的知识;
3、系统的各个功能模块要求用函数的形式实现;
4、界面友好(良好的人机交互),程序要有注释。
5、程序中所用到的排序查找方法需采用数据结构中所学方法实现,要求方法实用效率高。
?
课程设计实验报告要求:
1、预习报告:题目、课程设计任务、数据结构、程序的总体设计(算法)、模块划分 。
2、实验总结报告:流程图、主要源程序代码(需打印)、测试情况及调试中问题与解决方案、
小结等。
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct person //定义结构体
{
char num[10]; //学号
char name[15]; //姓名
int sex; //性别 0为女 1为男
char birth[10];//出生年月
char ji[20]; //专业
}person;
person per[100]; //定义100
char filename[20]; //定义全局变量
void menu_filename()
{
system("cls");
printf("请输入你要操作的文件名:");
scanf("\t%s",filename);
}
int menu_select() //菜单选择系统函数
{
char c;
do{
system("cls");
printf("\t\t ******************************\n");
printf("\t\t * 学生管理系统 *\n");
printf("\t\t ******************************\n");
printf("\t\t ┌─────────────—┐\n");
printf("\t\t │ 1. 添加记录 2. 显示记录 │\n");
printf("\t\t │ │\n");
printf("\t\t │ 3. 信息查询 4. 数据计算 │\n");
printf("\t\t │ │\n");
printf("\t\t │ 5. 修改记录 6. 删除记录 │\n");
printf("\t\t │ │\n");
printf("\t\t │ 0. 退出程序 │\n");
printf("\t\t └─────────────—┘\n");
printf("\t\t请您选择(0-6):");
c=getchar();
}while(c<'0'||c>'6');
return (c-'0'); //字符减去’0‘得到的是数字整型//
}
//*********************************************************************//
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//
void add() //添加函数
{
FILE *fp;
int i=0,n=0;
char ch='y'; //首先定义ch='y'
system("cls"); //清屏函数 系统中调用
while(ch =='y'|| ch =='Y') //其实只有当输入N或n时才跳出循环
{
printf(" ----学生纪录添加----\n");
printf("学号:\n");
scanf("\t%s",per[i].num);
printf("姓名:\n");
scanf("\t%s",per[i].name);
printf("性别:\n");
scanf("\t%d",&per[i].sex);
printf("出生年月(例如2000年2月==》200002):\n");
scanf("\t%s",&per[i].birth);
printf("专业:\n");
scanf("\t%s",&per[i].ji);
printf("是否继续添加?(y/n)");
ch = getchar();
i++;
n=n+1;
system( "cls ");
}system("pause"); //等待命令
if((fp=fopen(filename,"a"))==NULL) //以2进制形式进行文件尾追加//
{
printf("cannot open the files\n");
system("pause");
return; //如果文件出现错误 就返回
}
for(i=0;i<n;i++)
if(fwrite(&per[i],sizeof(person),1,fp)!=1) //以2进制形式写入文件中//一次写入一个数组//
printf("file write error\n");
fclose(fp); //关闭文件
system("pasue");
}
//*********************************************************************//
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//
void scan() //显示记录 进行全面信息浏览
{
void amend(); //声明修改函数//
char sign='y';
FILE *fp;
int i=0,n;
system("cls");
if((fp=fopen(filename,"r"))==NULL) //以2进制方式读取文件信息//
{
printf("cannot open the files\n");
system("pause");
return;
}
while(!feof(fp)) //一直读取知道文件尾结束
{
fread(&per[i],sizeof(person),1,fp); //以2进制方式将文件信息读到数组内存中//一次读取一个//
i++;
}
fclose(fp);
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
printf(" 学号 姓名 性别 出生 专业\n");
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
for(n=0;n<i-1;n++) //循环全部输出
printf("\t%s \t%s \t\t%d \t%s \t%s\n",per[n].num,per[n].name,per[n].sex,per[n].birth,per[n].ji);
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
system("pause");
system("cls");
printf("是否需要修改?(y/n)");
scanf("\t%c",&sign);
if(sign!='n'&&sign!='N') //选择是否在浏览后进行修改//
amend();
system("pause");
}
//*********************************************************************//
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//
//数据查询//
void query() //学生信息的不同方式查询
{
FILE *fp;
int i=0,n=0;
int m;
system("cls");
printf("\t\n请选择查询方式:\n");
printf("\t┌──────┐\n");
printf("\t│1------姓名 │\n");
printf("\t│2------学号 │\n");
printf("\t│3------返回 │\n");
printf("\t└──────┘\n");
printf("请输入你要查询的方式\n");
scanf("%d",&m);
while(m!=1&&m!=2&&m!=3)
{
printf("输入错误请重新查询\n");
scanf("%d",&m);
}
if((fp=fopen(filename,"r"))==NULL) //以2进制方式读取文件信息//
{
printf("cannot open the files\n");
system("pause");
return;
}
while(!feof(fp))
{
fread(&per[i],sizeof(person),1,fp); //以2进制方式将文件信息读到数组内存中//一次读取一个//
i++;n=n+1;
}
if(m==1) //姓名查询
{
char s[20];
int i=0;
printf("\t请输入想查询的姓名:");
scanf("\t%s",s);
while(strcmp(per[i].name,s)!=0&&i<n) i++; //比较per[i].name与所输入姓名是否相同//
if(i==n)
{
printf("\t通讯录中没有此人!\n");
system("pause");
return;
}
printf("\t学号: %s\n",per[i].num);
printf("\t
C语言课程设计大作业-学生管理系统(含报告和源码).zip


发奋的小张
- 粉丝: 549
- 资源: 5