C语言单链表的应用--档案管理系统
2016-08-24 11:39
501 查看
最近在学完《c与指针》后,再学习基本的数据结构时,记录一下自己再借鉴前人项目的基础上写的一些小项目。希望能和c语音初学朋友一起分享一下。接下来会双链表和循环链表的应用,还有二叉树的基本应用。
/*制作一个学生档案管理系统,可以添加,插入,删除,查看,替换。*/
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
#define number 3
typedef struct node
{
char name[20];
struct node *link;
}stud;
stud *creat(int n)
{
int i;
stud *p,*h,*s;
if((h=(stud*)malloc(sizeof(stud)))==NULL)
{
printf("不能分配内存空间!");
exit(0);
}
h->name[0]='\0';
h->link=NULL;
p=h;
for(i=0;i<n;i++)
{
if((s=(stud*)malloc(sizeof(stud)))==NULL)
{
printf("不能分配内存空间!");
exit(0);
}
p->link=s;
p=s;
printf("请输入第%d个人的姓名:",i+1);
scanf("%s",s->name);
s->link=NULL;
}
return(h);
}
stud *search(stud *h,char *x) //返回当前节点的地址,也就可以找到下一个节点的地址p->link
{
stud *p;
char *y;
int i;
p=h->link;
while(p!=NULL) {
y=p->name;
i++;
if(strcmp(x,y)==0)
{
printf("存在该档案!");
printf("它在第%d位\n",i);
return(p);
}
else p=p->link;
}
if(p==NULL)
printf("没有该名字!");
}
void insert(stud *p) /*插入函数,在指针p后插入*/
{
char stuname[20];
stud *s; /*指针s是保存新结点地址的*/
if((s= (stud *)malloc(sizeof(stud)))==NULL)
{
printf("不能分配内存空间!");
exit(0);
}
printf("请输入你要插入的人的姓名:");
scanf("%s",stuname);
strcpy(s->name,stuname); /*把指针stuname所指向的数组元素拷贝给新结点的数据域*/
s->link=p->link; /*本来p->link是指向下一个节点,现在把值赋给新节点,把新结点的链域指向原来p结点的后继结点*/
p->link=s; /*p结点的链域指向新结点*/
}
stud *search2(stud *h,char *x)
{
stud *p,*s;
char *y;
s=h;
p=h->link ;
while(p!=NULL)
{
y=p->name;
if(strcmp(x,y)==0)
return(s);
else
{
p=p->link ;
s=s->link ;
}
}
if(p==NULL)
printf("不存在该档案!");
}
void del(stud *x,stud *y) //x为前一个节点的指针,y为当前节点指针
{
x->link =y->link ;
free(y);
printf("成功删除档案!\n");
}
void prin(stud *h)
{
char *stun,c;
stud *s;
int i=0;
s=h->link;
while(s!=NULL)
{
i++;
stun=s->name;
printf("第%d个人的姓名:%s\n",i,stun);
s=s->link ;
}
}
int main(){
stud *head,*searchpoint,*search2point;
char fullname[20];
int num;
printf("/************************");
printf("档案管理系统");
printf("************************/\n");
printf(" * \t1:查找\t\t2:删除\t\t3:插入\t\t *\n");
printf(" * \t4:显示档案\t\t\t0:退出\t\t *\n");
printf("/************************");
printf("档案管理系统");
printf("************************/\n");
head=creat(number);
printf("档案创建完成!\n");
while(1){
printf("请输入:");
scanf("%d",&num);
if(num==0)
exit(0);
else if(num==1){
printf("请输入要查找的名字:");
scanf("%s",fullname);
searchpoint=search(head,fullname);
}
else if(num==2){
printf("请输入要删除的名字:");
scanf("%s",fullname);
searchpoint=search(head,fullname);
search2point=search2(head,fullname);
del(search2point,searchpoint);
}
else if(num==3){
printf("请输入要插在哪个名字后面:");
scanf("%s",fullname);
searchpoint=search(head,fullname);
insert(s
86ae
earchpoint);
}else if(num==4){
prin(head);
}
else printf("错误输入!\n");
}
}
/*制作一个学生档案管理系统,可以添加,插入,删除,查看,替换。*/
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
#define number 3
typedef struct node
{
char name[20];
struct node *link;
}stud;
stud *creat(int n)
{
int i;
stud *p,*h,*s;
if((h=(stud*)malloc(sizeof(stud)))==NULL)
{
printf("不能分配内存空间!");
exit(0);
}
h->name[0]='\0';
h->link=NULL;
p=h;
for(i=0;i<n;i++)
{
if((s=(stud*)malloc(sizeof(stud)))==NULL)
{
printf("不能分配内存空间!");
exit(0);
}
p->link=s;
p=s;
printf("请输入第%d个人的姓名:",i+1);
scanf("%s",s->name);
s->link=NULL;
}
return(h);
}
stud *search(stud *h,char *x) //返回当前节点的地址,也就可以找到下一个节点的地址p->link
{
stud *p;
char *y;
int i;
p=h->link;
while(p!=NULL) {
y=p->name;
i++;
if(strcmp(x,y)==0)
{
printf("存在该档案!");
printf("它在第%d位\n",i);
return(p);
}
else p=p->link;
}
if(p==NULL)
printf("没有该名字!");
}
void insert(stud *p) /*插入函数,在指针p后插入*/
{
char stuname[20];
stud *s; /*指针s是保存新结点地址的*/
if((s= (stud *)malloc(sizeof(stud)))==NULL)
{
printf("不能分配内存空间!");
exit(0);
}
printf("请输入你要插入的人的姓名:");
scanf("%s",stuname);
strcpy(s->name,stuname); /*把指针stuname所指向的数组元素拷贝给新结点的数据域*/
s->link=p->link; /*本来p->link是指向下一个节点,现在把值赋给新节点,把新结点的链域指向原来p结点的后继结点*/
p->link=s; /*p结点的链域指向新结点*/
}
stud *search2(stud *h,char *x)
{
stud *p,*s;
char *y;
s=h;
p=h->link ;
while(p!=NULL)
{
y=p->name;
if(strcmp(x,y)==0)
return(s);
else
{
p=p->link ;
s=s->link ;
}
}
if(p==NULL)
printf("不存在该档案!");
}
void del(stud *x,stud *y) //x为前一个节点的指针,y为当前节点指针
{
x->link =y->link ;
free(y);
printf("成功删除档案!\n");
}
void prin(stud *h)
{
char *stun,c;
stud *s;
int i=0;
s=h->link;
while(s!=NULL)
{
i++;
stun=s->name;
printf("第%d个人的姓名:%s\n",i,stun);
s=s->link ;
}
}
int main(){
stud *head,*searchpoint,*search2point;
char fullname[20];
int num;
printf("/************************");
printf("档案管理系统");
printf("************************/\n");
printf(" * \t1:查找\t\t2:删除\t\t3:插入\t\t *\n");
printf(" * \t4:显示档案\t\t\t0:退出\t\t *\n");
printf("/************************");
printf("档案管理系统");
printf("************************/\n");
head=creat(number);
printf("档案创建完成!\n");
while(1){
printf("请输入:");
scanf("%d",&num);
if(num==0)
exit(0);
else if(num==1){
printf("请输入要查找的名字:");
scanf("%s",fullname);
searchpoint=search(head,fullname);
}
else if(num==2){
printf("请输入要删除的名字:");
scanf("%s",fullname);
searchpoint=search(head,fullname);
search2point=search2(head,fullname);
del(search2point,searchpoint);
}
else if(num==3){
printf("请输入要插在哪个名字后面:");
scanf("%s",fullname);
searchpoint=search(head,fullname);
insert(s
86ae
earchpoint);
}else if(num==4){
prin(head);
}
else printf("错误输入!\n");
}
}
相关文章推荐
- 单链表的应用:用C语言实现简单的员工管理系统(新建、增、删、改、查、排序)
- FreeBSD 6.0架设管理与应用-第六章 档案系统管理
- 二叉树的应用:利用C语言编写简单的家谱管理系统
- 企业J2EE应用实践-档案管理系统
- 【C语言】结构体的应用以及学生成绩管理系统的设计
- c语言实现学生档案管理系统
- Lotus Domino服务器及其应用系统的高级管理(1)
- 个人理财帐户管理系统C语言源码
- Lotus Domino服务器及其应用系统的高级管理(3)
- Lotus Domino服务器及其应用系统的高级管理(2)
- C语言编写的简单的学生成绩管理系统
- 客户关系管理系统在医药领域内的应用
- 征管综合资料信息化档案管理系统软件评述
- VB6应用系统的权限管理
- 数据库技术在公文管理系统的应用
- 用C语言实现一个类似学籍管理系统的 e协 管理系统beta ( 正在完善中...)
- 客户关系管理系统在医药领域内的应用
- 学生档案管理系统设计分析
- 我的C语言学生成绩管理系统
- C语言编写的简单的学生成绩管理系统