| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 797 人关注过本帖
标题:急!!! 求高手解释!学籍管理系统的修改和删除功能实现不了~~相关子函数部 ...
只看楼主 加入收藏
wangyudong88
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-11-23
结帖率:0
收藏
已结贴  问题点数:10 回复次数:5 
急!!! 求高手解释!学籍管理系统的修改和删除功能实现不了~~相关子函数部分已用红色标出~
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define N 100
struct student
{
char num[10];
char name[10];
char tel[11];
};
/*以下是函数原型说明,被调函数的定义在主函数后面时,要加此部分*/
void myprint();
void mycreate();
void mydisplay();
void mysearch();
/*sch_num与sch_name函数被mysearch调用*/
void sch_num(FILE *fp);
void sch_name(FILE *fp);
void mymodify();
void myadd();
void mydelete();
/*del_num与del_name函数被mydelete调用*/
void del_num(FILE *fp);
void del_name(FILE *fp);
void mysort();
/*sort_num与sort_name函数被mysort调用*/
void sort_num();
void sort_name();

void main()
{
char choose,yes_no;

do
{
myprint();/*显示主菜单*/
printf(" ");
choose=getch();
switch(choose)
{
case'1': mycreate(); break;/*创建*/
case'2': mydisplay(); break;/*显示*/
case'3': mysearch(); break;/*查询*/
case'4': mymodify(); break;/*修改*/
case'5': myadd(); break;/*添加*/
case'6': mydelete(); break;/*删除*/
case'7': mysort(); break;/*排序*/
case'0': break;
default:printf("\n %c为非法选项!\n",choose);
}
if(choose=='0')
break;
printf("\n 要继续选择吗(Y/N)?\n");
do
{
yes_no=getch();
}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
}while(1);
}

void myprint()/*显示菜单界面*/
{
printf("\n\n\n\n\n\n\n\n");
printf(" |----------------------------------|\n");
printf(" | 请输入选项编号(0-7):|\n");
printf(" |----------------------------------|\n");
printf(" | 1--创建学生学籍管理系统 |\n");
printf(" | 2--显示学生学籍管理系统 |\n");
printf(" | 3--查询学生学籍管理系统 |\n");
printf(" | 4--修改学生学籍管理系统 |\n");
printf(" | 5--添加学生学籍管理系统 |\n");
printf(" | 6--删除学生学籍管理系统 |\n");
printf(" | 7--排序学生学籍管理系统 |\n");
printf(" | 0--退出 |\n");
printf(" |----------------------------------|\n");
}

/*定义创建学生学籍管理系统的函数*/
void mycreate()
{
int i=1;
struct student temp;
FILE *fp;

fp=fopen("f:\\11\\guanli.dat","w");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}
printf("\n 请输入第1个记录:\n");
printf(" 学号(用#结束输入):");

gets(temp.num);

printf(" 姓名(用#结束输入):");
gets(temp.name);
printf(" 电话号码(用#结束输入):");
gets(temp.tel);
while(temp.num[0]!='#'&&temp.name[0]!='#'&&temp.tel[0]!='#')
{
fprintf(fp,"%23s%15s%15s\n",temp.num,temp.name,temp.tel);
i++;

printf("\n 请输入第%d个记录:\n",i);
printf(" 学号(用#结束输入):");


gets(temp.num);

printf(" 姓名(用#结束输入):");
gets(temp.name);
printf(" 电话号码(用#结束输入):");
gets(temp.tel);
}
fclose(fp);
}

/*定义显示学生学籍管理系统的函数*/
void mydisplay()
{
int n=0;
struct student temp;
FILE *fp;

fp=fopen("f:\\11\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}

system("cls");
printf(" 学号 姓名 电话号码\n");
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",&temp.num,&temp.name,&temp.tel);
printf("%23s%15s%15s\n",temp.num,temp.name,temp.tel);
n++;
}
if(n==0)
printf("\n 文件中无记录!\n");
else
printf("\n 文件中共用%d个记录!\n",n);
fclose(fp);
}

/*定义查询学生学籍管理系统的函数*/
void mysearch()
{
char c;
FILE *fp;

fp=fopen("f:\\11\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}

printf("\n 按学号查询(h),还是按姓名查询(m)?\n");
c=getch();
if(c=='h'||c=='H')
sch_num(fp);/*按学号查询*/
if(c=='m'||c=='M')
sch_name(fp);/*按姓名查询*/
else
printf("\n 非法字符!\n");
fclose(fp);
}

/*定义按学号查询学生学籍管理系统的函数*/
void sch_num(FILE *fp)
{
int flag=0,n=0;
char tempnum[10];
struct student temp;

printf("\n 请输入要查询记录的学号:");
gets(tempnum);
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",&temp.num,&temp.name,&temp.tel);
if(strcmp(tempnum,temp.num)==0)
{
if(flag==0)
printf(" 学号 姓名 电话号码\n");
printf("%23s%15s%15s\n",temp.num,temp.name,temp.tel);
flag=1;
}
n++;
}
if(n=0)
printf("\n 文件中无记录!\n");
else  
if(flag==0)
printf("\n 文件中无此人!\n");
}
/*定义按姓名查询学生学籍管理系统的函数*/
void sch_name(FILE *fp)
{
int flag=0,n=0;
char tempname[10];
struct student temp;

printf("\n 请输入要查询记录的姓名:\n");
gets(tempname);
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",&temp.num,&temp.name,&temp.tel);
if(strcmp(tempname,temp.name)==0)
{
if(flag==0)
printf(" 学号 姓名 电话号码\n");
printf("%23s%15s%15s\n",temp.num,temp.name,temp.tel);
flag=1;
}
n++;
}
if(n==0)
printf("\n 文件中无记录!\n");
else
if(flag==0)
printf("\n 文件中无此人!\n");
}

/*定义修改学生学籍管理系统的函数*/
void mymodify()
{
char c;
int n=0;
struct student*find,temp,record[100],*p;/*最多100个记录*/
FILE *fp;

fp=fopen("f:\\11\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}

p=record;
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
}
fclose(fp);

if(n==0)
{
printf("\n 文件中无记录!\n");
return;
}
printf("\n 请输入要修改记录的学号:");
gets(temp.num);
for(p=record;p<record;p++)
if(strcmp(temp.num,p->num)==0)
{
find=p;/*find记住修改记录的位置*/
break;
}
if(p==record+n)
{
printf("\n 无此人!\n");
return;
}
do
{
printf("\n 请输入正确的学号:");
do
{
gets(temp.num);
}while(strcmp(temp.num,"")==0);
printf(" 请输入正确的姓名:");
gets(temp.name);
printf(" 请输入正确的电话号码:");
gets(temp.tel);
for(p=record;p<record+n;p++)
if((strcmp(temp.num,p->num)==0)&&(p!=find))
{
printf("\n 学号重复,要重新输入吗(Y/N)?");
do
{
c=getch();
}while(c!='Y'&&c!='y'&&c!='N'&&c!='n');
putchar('\n');
break;
}
if(p==record+n)
{
*find=temp;/*find指向需要修改记录的位置*/
break;
}
}while(c=='Y'||c=='y');

fp=fopen("f:\\11\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}
for(p=record;p<record+n;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
fclose(fp);
}

/*定义添加学生学籍管理系统的函数*/
void myadd()
{
char c;
int n=0;
struct student temp,record[N],*p;
FILE *fp;

fp=fopen("f:\\11\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}

p=record;
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
}
fclose(fp);

do
{
printf("\n 请输入新记录的学号:");
do
{
gets(temp.num);
}while(strcmp(temp.num,"")==0);
printf(" 请输入新纪录的姓名:");
gets(temp.name);
printf(" 请输入新纪录的电话号码:");
gets(temp.tel);
for(p=record;p<record+n;p++)
if(strcmp(temp.num,p->num)==0)
{
printf("\n 学号重复,要重新输入吗(Y/N)?");
do
{
c=getch();
}while(c!='Y'&&c!='y'&&c!='N'&&c!='n');
putchar('\n');
break;
}
if(p==record+n)
{
*p=temp;
break;
}
}while(c=='Y'||c=='y');

fp=fopen("f:\\11\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}
for(p=record;p<record+n+1;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
fclose(fp);
}

/*定义删除学生学籍管理系统的函数*/
void mydelete()
{
char c;
FILE *fp;

fp=fopen("f:\\11\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}

printf("\n 按学号删除(h),还是按姓名删除(m)?");
c=getch();
if(c=='h'||c=='H')
del_num(fp);/*按学号删除*/
if(c=='m'||c=='M')
del_name(fp);/*按姓名删除*/
else
printf("\n 非法字符!\n");
fclose(fp);
}

/*定义按学号删除学生学籍管理系统的函数*/
void del_num(FILE *fp)
{
int n=0;
char tempnum[10];
struct student record[N],*p,*k;

p=record;
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
}
fclose(fp);

printf("\n 请输入要删除记录的学号:");
gets(tempnum);

for(k=record;k<record+n;k++)
if(strcmp(tempnum,k->num)==0)
break;/*找到要删除记录结束循环*/
if(k<record+n)/*提前结束循环,说明找到人*/
for(p=k;p<k+n-1;p++)/*向左移一位,相当于删除记录*/
*p=*(p+1);
else
printf("\n 无此人!\n");

fp=fopen("f:\\11\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}

for(p=record;p<record+n-1;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
}

/*定义按姓名删除学生学籍管理系统的函数*/
void del_name(FILE *fp)
{
int n=0;
char tempname[10];
struct student record[N],*p,*k;

p=record;
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
}
fclose(fp);

printf("\n 请输入要删除记录的姓名:");
gets(tempname);

for(k=record;k<record+n;k++)
if(strcmp(tempname,k->name)==0)
break;/*找到要删除记录结束循环*/
if(k<record+n)/*提前结束循环,说明找到人*/
for(p=k;p<k+n-1;p++)/*向左移一位,相当于删除记录*/
*p=*(p+1);
else
printf("\n 无此人!\n");

fp=fopen("f:\\11\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}

for(p=record;p<record+n-1;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
}

/*定义排序学生学籍管理系统的函数*/
void mysort()
{
char c;
FILE *fp;

fp=fopen("f:\\11\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}
fclose(fp);

printf("\n 按学号排序(h),还是按姓名排序(m)?");
c=getch();
if(c=='h'||c=='H')
sort_num();/*按学号排序*/
if(c=='m'||c=='M')
sort_name();/*按姓名排序*/
else
printf("\n 非法字符!\n");
}

/*定义按学号排序学生学籍管理系统的函数*/
void sort_num()
{
int i,j,k,n=0;
char c;
struct student record[N],*p,temp;
FILE *fp;

fp=fopen("f:\\11\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}

p=record;
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
}
fclose(fp);

printf("\n 按升序(s),还是按降序(j)?");
c=getch();
if(c=='s'||c=='S')/**/
for(i=0;i<n-1;i++)/**/
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp((p+k)->num,(p+j)->num)>0)
k=j;
temp=*(p+k);
*(p+k)=*(p+i);
*(p+i)=temp;
}
else
if(c=='j'||c=='J')/**/
for(i=0;i<n-1;i++)/**/
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp((p+k)->num,(p+j)->num)<0)
k=j;
temp=*(p+k);
*(p+k)=*(p+i);
*(p+i)=temp;
}
else
{
printf("\n 非法字符!\n");
return;
}

fp=fopen("f:\\11\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}

for(p=record;p<record+n;p++)
{
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
printf("%23s%15s%15s\n",p->num,p->name,p->tel);
}
fclose(fp);
}

/*定义按姓名排序学生学籍管理系统的函数*/
void sort_name()
{
int i,j,k,n=0;
char c;
struct student record[N],*p,temp;
FILE *fp;

fp=fopen("f:\\11\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}

p=record;
while(feof(fp)==0)
{
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
}
fclose(fp);

printf("\n 按升序(s),还是按降序(j)?");
c=getch();
if(c=='s'||c=='S')/**/
for(i=0;i<n-1;i++)/**/
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp((p+k)->name,(p+j)->name)>0)
k=j;
temp=*(p+k);
*(p+k)=*(p+i);
*(p+i)=temp;
}
else
if(c=='j'||c=='J')/**/
for(i=0;i<n-1;i++)/**/
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp((p+k)->name,(p+j)->name)<0)
k=j;
temp=*(p+k);
*(p+k)=*(p+i);
*(p+i)=temp;
}
else
{
printf("\n 非法字符!\n");
return;
}

fp=fopen("f:\\11\\guanli.dat","r+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}

for(p=record;p<record+n;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
fclose(fp);
}
上附的是源程序,其中可能还有小问题,望高手们指正!!
搜索更多相关主题的帖子: 学籍管理 include 
2011-12-19 12:13
jia393741127
Rank: 2
等 级:论坛游民
帖 子:16
专家分:29
注 册:2011-12-20
收藏
得分:5 
说实话 看着这长度 直接晕了。。 添加一个清屏函数啊   这样更加美观

[ 本帖最后由 jia393741127 于 2011-12-20 12:49 编辑 ]
2011-12-20 12:44
请叫我苏哥
Rank: 1
等 级:新手上路
帖 子:6
专家分:8
注 册:2011-11-26
收藏
得分:5 
你怎么删除修改和查找的函数混在一起啦,这样看起来很乱。你一句话直接调用查找函数不是更好吗
2011-12-20 13:24
wangyudong88
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-11-23
收藏
得分:0 
回复 2楼 jia393741127
原来好像有清屏函数,发的时候好像丢了……
2011-12-20 14:25
wangyudong88
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-11-23
收藏
得分:0 
回复 3楼 请叫我苏哥
混在一块了?不知道哈,刚才改动了一下修改部分函数,功能实现了,现在就差删除函数了,看不懂删除部分的子函数,望高手解释!
2011-12-20 14:29
y1011342622
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2012-3-25
收藏
得分:0 
用链表删除  会更好
2012-03-25 11:46
快速回复:急!!! 求高手解释!学籍管理系统的修改和删除功能实现不了~~相关子 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028333 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved