学生通迅录管理_c语言课程设计

更新时间:2023-05-20 02:32:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

程序代码

/******头文件(.h)***********/ #include <stdio.h> /*I/O函数*/ #include <stdlib.h> /*标准库函数*/ #include <string.h>/*字符串函数*/ #include <ctype.h> /*字符操作函数*/ #define M 50 /*定义常数表示记录数*/ typedef struct /*定义数据结构*/ { char cla[8];/*班级*/

char num[15];/*学号*/ char name[20]; /*姓名*/

char qq[12]; /*QQ*/ char tel[15]; /*电话*/ }STUDENT;

/**********************************

基础函数声明

*********************************/

int enter(STUDENT t[],int n); /*********************通迅录建立函数声明***********************/ int menu(); ***********************/ void print(STUDENT temp);

/*********************主菜单函数声明

输加出

函函

数数

声声

明明

/*********************

***********************/

int add(STUDENT t[], int n); /********************************************/

void change(STUDENT s[],int ***********************/ int del(STUDENT t[],int n);

n);

/*********************修改函数声明

/*********************

***********************/

void file_in(STUDENT t[],int ***********************/ int file_out(STUDENT t[]);

n);/*********************保存函

数声明声

/*********************

***********************/

int find_name(STUDENT t[],int n);/*********************姓名查找函数声明***********************/

int find_num(STUDENT t[],int n);/*********************学号查询函数声明***********************/

int find_qq(STUDENT t[],int n); /*********************QQ

查询函数声明

***********************/

int find_tel(STUDENT t[],int n); /*********************电话号码查询函数声明***********************/ int search(STUDENT t[],

int

n); /*********************查询函数声明

***********************/

int search_menu(STUDENT t[], int n);/*********************查询菜单函数声明***********************/

程序代码

int main()

{ int i=0,j=0; FILE *fp; STUDENT stu[M]; /*定义结构体数组*/

int len=M; /*保存记录长度*/

if((fp=fopen("record.txt","rb"))==NULL) /*打开文件,并判断打开是否正常*/ { printf("文件已不存在,请从新建立通迅录\n");/*没打开*/ } else { }

len=file_out(stu); for(;;)/*无限循环*/

{ switch(menu()) /*调用主菜单函数,返回值整数作开关语句的条件*/ }

{

case 0:exit(0);break;/*退出*/

case 1:print(stu[search(stu,len)]);break; /*查询*/ case 2:len=add(stu,len);break; /*增加*/

case 3:change(stu,len);break; /*修改*/ case 4:len=del(stu,len); break; /*删除*/

//case 5:display(stu,len);break; /*显示所有学生信息*/ }

len=enter(stu,len);

return 0; }

/**********************************通迅录建立函数,参数为结构体数组以及记录条数******************************/ int enter(STUDENT t[],int n) { int i,k=2,c=1;

STUDENT temp;

printf("建立通迅录:\n");

printf("------------------------------------------------\n"); for(i=0;k>1;i++) { printf("输入个人班级号:\n");

scanf("%s",temp.cla);

printf("输入个人学号:\n"); scanf("%s",temp.num); printf("输入个人姓名:\n");

程序代码

} n=i;

scanf("%s",);

printf("输入个人QQ号:\n"); scanf("%s",temp.qq);

printf("输入个人电话:\n"); scanf("%s",temp.tel); strcpy(t[i].cla,temp.cla); strcpy(t[i].num,temp.num); strcpy(t[i].name,); strcpy(t[i].qq,temp.qq);

strcpy(t[i].tel,temp.tel);

printf("是否继续添加,是则按1,否则按0\n)"); scanf("%d",&c); if(c==0) k=0;

file_in(t,n);

return n; /*返回记录条数*/

}

/**********************************主菜单函数,返回值供主函数调用******************************/

int menu() { char s[80]; int c; printf("\t\t\t欢迎使用kemgine学生通迅录管理系统\n\t\t\t\t版本:beta 2011\n\t\t\t\t作者:陈利军\n请按任意键进入主菜单......\n");/*提示压任意键继续*/

getchar(); /*读入任意字符*/

printf("********************MENU*********************\n\n"); printf(" 0. 退出程序\n"); printf(" 1. 查询\n"); printf(" 2. 增加\n"); printf(" 3. 修改\n"); printf(" 4. 删除\n");

printf("***********************************************\n"); do{ printf("\n 请输入你的选择(0~4):"); /*提示输入选项*/

scanf("%s",s); /*输入选择项*/

c=atoi(s); /*将输入的字符串转化为整型数*/

}while(c<0||c>5); /*选择项不在0~4之间重输*/

return c; /*返回选择项,主程序根据该数调用相应的函数*/

}

/**********************************输出函数,参数为结构体数组******************************/

程序代码

void print(STUDENT temp)

{ printf("\n\n*****************************************************************************\n\n\n"); printf(" 班级号 学号 姓名 电话 QQ\n\n");

printf("--------------------------------------------------------------------------------\n\n");

printf(" %2s\t%15s%15s%15s %12s\n\n\n",temp.cla,temp.num,,temp.tel,temp.

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

}

/**********************************添加函数,参数为结构体数组以及记录条数******************************/ int add(STUDENT t[],int n) {

STUDENT temp;

if(n>=M) printf("通迅录容量已达到最大值,无法增加...\n"); else {

n++;

printf("输入增加的个人班级号:\n"); scanf("%s",temp.cla);

printf("输入增加的个人学号:\n"); scanf("%s",temp.num);

printf("输入增加的个人姓名:\n"); scanf("%s",);

printf("输入增加的个人QQ号:\n"); scanf("%s",temp.qq);

printf("输入增加的个人电话:\n"); scanf("%s",temp.tel); strcpy(t[n].cla,temp.cla); strcpy(t[n].num,temp.num); strcpy(t[n].name,); strcpy(t[n].qq,temp.qq); strcpy(t[n].tel,temp.tel); file_in(t,n);

}

return n;

}

/**********************************修改函数,参数为结构体数组以及记录条数******************************/ void change(STUDENT s[],int n) {

程序代码

STUDENT temp;

int i=M,flag=0;

printf("请查找要修改个人记录的姓名:\n"); i=find_name(s,n); print(s[i]);

printf("是否修改?\n(1是 0否)\n"); scanf("%d",&flag);

if(flag==1) { printf("输入修改的个人班级号:\n");

scanf("%s",temp.cla);

printf("输入修改的个人学号:\n"); scanf("%s",temp.num);

printf("输入修改的个人姓名:\n"); scanf("%s",);

printf("输入修改的个人QQ号:\n"); scanf("%s",temp.qq);

printf("输入修改的个人电话:\n"); scanf("%s",temp.tel); strcpy(s[i].cla,temp.cla); strcpy(s[i].num,temp.num); strcpy(s[i].name,); strcpy(s[i].qq,temp.qq); strcpy(s[i].tel,temp.tel); file_in(s,n);

} }

/******************************删除函数,参数为结构体数组和记录条数****************************/ int del(STUDENT t[],int n) { int ch=0;

int i,j;

printf("查找要删除的记录信息\n"); /*提示信息*/ i=find_name(t,n); /*调用find_name函数*/

print(t[i]); /*调用输出函数显示该条记录信息*/

printf("确认是否要删除(1是/0否)\n"); /*确认是否要删除*/ scanf("%d",&ch); /*输入一个整数0或1*/ if(ch==1) /*如果确认删除整数为1*/

{ for(j=i+1;j<n;j++) /*删除该记录,实际后续记录前移*/

{ strcpy(t[j-1].cla,t[j].cla); /*将后一条记录的班级拷贝到前一条*/ strcpy(t[j-1].num,t[j].num); /*将后一条记录的学号拷贝到前一条*/

程序代码

strcpy(t[j-1].name,t[j].name); /*将后一条记录的姓名拷贝到前一条*/ strcpy(t[j-1].qq,t[j].qq);/*将后一条记录的QQ拷贝到前一条*/ strcpy(t[j-1].tel,t[j].tel);/*将后一条记录的电话拷贝到前一条*/

}

n--; /*记录数减1*/

}

printf("删除成功\n"); file_in(t,n);

return n; /*返回记录数*/

}

/**************************保存函数,参数为结构体数组和记录数**************************/ void file_in(STUDENT t[],int n) {

int i;

FILE *fp; /*指向文件的指针*/

if((fp=fopen("record.txt","wb"))==NULL) /*打开文件,并判断打开是否正常*/ { printf("不能打开文件\n");/*没打开*/ }

rewind(fp);

printf("\n保存信息中……\n"); /*输出提示信息*/ fprintf(fp,"%d",n); /*将记录数写入文件*/ fprintf(fp,""); /*将换行符号写入文件*/

exit(1); /*退出*/

for(i=0;i<n;i++) { fprintf(fp,"%-8s%-15s%-20s%-12s%-15s",t[i].cla,t[i].num,t[i].name,t[i].qq,t[i].tel);/*格式写入记录*/ fprintf(fp,""); /*将换行符号写入文件*/

}

fclose(fp);/*关闭文件*/

printf("****保存成功***\n\n"); /*显示保存成功*/ }

/**************************加载函数,将文件中的信息加载到参数结构体数组,参数为结构体数组和记录数**************************/ int file_out(STUDENT t[])

{ int i,n; FILE *fp; /*指向文件的指针*/ if((fp=fopen("record.txt","rb"))==NULL)/*打开文件*/

{ printf("不能打开文件\n"); /*不能打开*/ exit(1); /*退出*/

程序代码

}

rewind(fp);

fscanf(fp,"%d",&n); /*读入记录数*/

for(i=0;i<n;i++) fscanf(fp,"%8s%15s%20s%12s%15s",t[i].cla,t[i].num,t[i].name,t[i].qq,t[i].tel); /*按格

式读入记录*/ fclose(fp); /*关闭文件*/

return n; /*返回记录数*/ }

/****************************姓名查找函数,参数为记录数组和记录条数以及姓名s ************************/ int find_name(STUDENT t[],int n)

{ int i=M; char s[20]; /*要查找记录的姓名*/ printf("请输入要查找记录的姓名\n"); /*提示信息*/

scanf("%s",s);/*输入姓名*/

for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/

{ if(strcmp(s,t[i].name)==0) /*记录中的姓名和待比较的姓名是否相等*/ return i; /*相等,则返回该记录的下标号,程序提前结结束*/ }

if (i>=M) printf("没有找到相关记录\n"); return i; /*返回i值*/

}

/*****************************学号查找函数,参数为记录数组和记录条数以及学号num **************************/ int find_num(STUDENT t[],int n) {

int i=M;

char nu[15]; /*要查找记录的学号*/

printf("请输入要查找记录的学号\n"); /*提示信息*/ scanf("%s",nu);/*输入学号*/

for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/

{ if(strcmp(nu,t[i].num)==0) /*记录中的学号和待比较的学号是否相等*/ }

return i; /*相等,则返回该记录的下标号,程序提前结结束*/

if (i>=M) printf("没有找到相关记录\n"); return i; /*返回i值*/

}

/****************************QQ号查找函数,参数为记录数组和记录条数以及qq

程序代码

*************************/ int find_qq(STUDENT t[],int n) { int i=M; char q[12]; /*要查找记录的qq*/

printf("请输入要查找记录的qq\n"); /*提示信息*/ scanf("%s",q);/*输入qq*/

for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/ { if(strcmp(q,t[i].qq)==0) /*记录中的QQ和待比较的QQ是否相等*/ }

if (i>=M) printf("没有找到相关记录\n"); return i; /*返回i值*/

return i; /*相等,则返回该记录的下标号,程序提前结结束*/

}

/*********************************电话号查找函数,参数为记录数组和记录条数以及电话*************************/ int find_tel(STUDENT t[],int n) {

int i=M;

char te[15]; /*要查找记录的电话*/

printf("请输入要查找记录的电话\n"); /*提示信息*/ scanf("%s",te);/*输入电话*/

for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/

{ if(strcmp(te,t[i].tel)==0) /*记录中的电话和待比较的电话是否相等*/

return i; /*相等,则返回该记录的下标号,程序提前结结束*/

}

if (i>=M) printf("没有找到相关记录\n"); return i; /*返回i值*/

}

/********************************主查找函数,参数为记录数组和记录条数****************************/ int search(STUDENT t[],int n) {

int i=0;

switch(search_menu(t,n))

{

case 1:i=find_name(t,n);break; /*按姓名查询*/ case 2:i=find_num(t,n);break; /*按学号查询*/ case 3:i=find_tel(t,n);break; /*按电话号码查询*/ case 4:i=find_qq(t,n); break; /*按QQ号查询*/

程序代码

}

return i; }

/**************************主查找函数菜单,参数为记录数组和记录条数,返回值给主查找函数调用****************************/ int search_menu(STUDENT t[],int n) { char c;

printf("********************SEARCH MENU*********************\n\n"); printf(" 1. 按姓名查询\n"); printf(" 2. 按学号查询\n"); printf(" 3. 按电话号码查询\n");

printf(" 4. 按QQ号查询\n");

printf("***********************************************\n"); do{ printf("\n 请输入你的选择(1~4):"); /*提示输入选项*/ c=getchar(); /*输入的字符*/

}while(c<'1'||c>'4'); /*选择项不在1~4之间重输*/

n=c-48;

return n; /*返回选择项,主程序根据该数调用相应的函数*/

}

本文来源:https://www.bwwdw.com/article/s6q4.html

Top