
void my_del(char *p)
{
inti=0,j=0
while(p[i]!='\0'){ //循环条件是到字符串末尾结束
if(p[i]=='*'){ //如果当前字符是*,那么把后面的字符全部向前移动/ //一个字节,实现删除当前的星号的效果,然后还是看
//当前的字符是不是星号,如果是,继续删除当前这个
//星号,后面的数据依旧向前搬,这里没有对循环变量i // *** 作.i是在下面的else里面 *** 作的.
for(j=ip[j]!='\0'j++)
p[j]=p[j+1]
}
else{
if(p[i]>='a' && p[i]<='z') //如果当前字母是小写字母.
p[i]=p[i]-32 //减去32,因为ascii表 //中小写字母在大写字母后面,距离 //32.
i++ //下一个.
}
}
}
main()
{
char a[80] //字符串 长度80. gets(a) //获取字符串,gets没有长度判断,这个函数
有漏洞.如果输入
//长度大于80,栈会溢出.
my_del(a) //调用功能.传的是指针,对数据直接 *** 作生效.
puts(a) //输出结果.
}#includeintmydel(int*p,intn,intk)voidmyout(int*a,intn)intmain(){inta[10]={1,2,3,4,5,6,7,8,9,10}intn=10,k=0printf("inputtheknumbertodelete\n")scanf("%d",&k)if(k10){printf("inputnumbererror\n")}myout(a,10)n=mydel(a,n,k)myout(a,n)return0}intmydel(int*p,intn,intk){if(k>n||k0)*(p-1)=*p++return--n}voidmyout(int*a,intn){inti=0for(i本人类似的源代码!!希望对楼主有帮助!!!!
/* Note:Your choice is C IDE */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define N 100
struct student
{
char num[20]
char name[20]
char tel[20]
}
/* 以下是函数原型说明,被调函数的定义在主调函数后面时,要加此部分 */
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')
//system("cls")
}while(yes_no!='N'||yes_no!='n')
}
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:\\shuju.dat","w")
if(fp==NULL)
{
printf("\n 打开文件失败!\n")
return
}
printf("\n 请输入第1个记录:\n") printf(" 学号
(用#结束输入):")
do
{
gets(temp.num)
}while(strcmp(temp.num,"")==0)
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(" 学号(用#结束输入):")
do
{
gets(temp.num)
}while(strcmp(temp.num,"")==0)
printf(" 姓名(用#结束输入):")
gets(temp.name)
printf(" 电话号码(用#结束输入):")
gets(temp.tel)
}
fclose(fp)
}
/* 定义显示信息管理系统的函数 */
void mydisplay()
{
int n=0
struct student temp
FILE *fp
fp=fopen("f:\\shuju.dat","r+")
if(fp==NULL)
{
printf("\n 打开文件失败!\n")
return
}
//clrscr()
//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:\\shuju.dat","r+")
if(fp==NULL)
{
printf("\n 打开文件失败!\n")
return
}
printf("\n 按学号查询(h),还是按姓名查询(m)?")
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 请输入要查询记录的姓名:")
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:\\shuju.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=recordp<record+np++)
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=recordp<record+np++)
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:\\shuju.dat","r+")
if(fp==NULL)
{
printf("\n 打开文件失败!\n")
return
}
for(p=recordp<record+np++)
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:\\shuju.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=recordp<record+np++)
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:\\shuju.dat","r+")
if(fp==NULL)
{
printf("\n 打开文件失败!\n")
return
}
for(p=recordp<record+n+1p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel)
fclose(fp)
}
/* 定义删除信息管理系统的函数 */
void mydelete()
{
char c
FILE *fp
fp=fopen("f:\\shuju.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=recordk<record+nk++)
if(strcmp(tempnum,k->num)==0)
break /* 找到要删记录结束循环 */
if(k<record+n) /* 提前结束循环,说明找到人 */
for(p=kp<k+n-1p++) /* 向左移一位,相当于删除记录 */
*p=*(p+1)
else
printf("\n 无此人!\n")
fp=fopen("f:\\shuju.dat","w")
if(fp==NULL)
{
printf("\n 打开文件失败!\n")
return
}
for(p=recordp<record+n-1p++)
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=recordk<record+nk++)
if(strcmp(tempname,k->name)==0)
break /* 找到要删记录结束循环 */
if(k<record+n) /* 提前结束循环,说明找到人 */
for(p=kp<k+n-1p++) /* 向左移一位,相当于删除记录 */
*p=*(p+1)
else
printf("\n 无此人!\n")
fp=fopen("f:\\shuju.dat","w")
if(fp==NULL)
{
printf("\n 打开文件失败!\n")
return
}
for(p=recordp<record+n-1p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel)
}
/* 定义排序信息管理系统的函数 */
void mysort()
{
char c
FILE *fp
fp=fopen("f:\\shuju.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:\\shuju.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=0i<n-1i++) /* 选择法排序 */
{
k=i
for(j=i+1j<nj++)
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=0i<n-1i++) /* 选择法排序 */
{
k=i
for(j=i+1j<nj++)
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:\\shuju.dat","w")
if(fp==NULL)
{
printf("\n 打开文件失败!\n")
return
}
for(p=recordp<record+np++)
{
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:\\shuju.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=0i<n-1i++) /* 选择法排序 */
{
k=i
for(j=i+1j<nj++)
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=0i<n-1i++) /* 选择法排序 */
{
k=i
for(j=i+1j<nj++)
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:\\shuju.dat","w")
if(fp==NULL)
{
printf("\n 打开文件失败!\n")
return
}
for(p=recordp<record+np++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel)
fclose(fp)
}


评论列表(0条)