欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
c語言單鏈表實現學生信息的增刪改查源程序
[打印本頁]
作者:
qhx
時間:
2021-1-12 22:47
標題:
c語言單鏈表實現學生信息的增刪改查源程序
C語言鏈表的基礎知識就不多說了,關鍵在于要知道它是不連續的內存單元通過指針的方式把數據串接成鏈的。百度一大把資料。
直接對程序加以說明,以及注意事項:
1.添加信息:直接在創建的鏈表尾部添加。讀者也可以自己試著修改成,鏈表指定位置添加。
2.刪除信息:首先分三種情況,第一:刪除的數據在表頭,第二:刪除的數據在表中間,最后,刪除的數據是表尾(即next指向的是NULL)。
3.修改、查詢信息:通過指定的方式去查找,比較簡單沒啥好說的。
4.登錄:這里我設置了默認的賬號密碼,三次之內輸入正確即可進入創建鏈表,否則退出進程。
思考:程序45行getchar()的作用?
在scanf中輸入name信息后按回車結束,輸入緩沖中保存了這個回車符,如果后面一個輸入信息格式是字符(串)格式,
它會自動把這個回車符賦給這個信息,所以getchar的作用是吃掉這個回車符。
單片機源程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "student.h"
int main(int argv,char *argc[])
{
Stu *head;
int entry,Num;
entry=login();
if(entry != 0)
return -1;
head=creat();
print(head);
while(1){
printf("input 1.添加 2.刪除 3.修改 4.查詢 5.打印 6.退出\n");
scanf("%d",&Num);
switch(Num){
case 1:head=add(head);print(head);break;
case 2:head=delet(head);print(head);break;
case 3:head=modify(head);print(head);break;
case 4:query(head);break;
case 5:print(head);break;
case 6:return 0;
default:printf("Invalid input\n");break;
}
}
return 0;
}
/* 創建學生鏈表 */
Stu *creat(void)
{
int n=0;
char i[4];
Stu *p1,*p2;
Stu *head = NULL;
p1=p2=(Stu *) malloc(sizeof(Stu));
do{
printf("please input student info:\n");
printf("name:");
scanf("%s",p1->name);
getchar();
printf("sex:");
scanf("%c",&p1->sex);
printf("num:");
scanf("%d",&p1->num);
printf("score:");
scanf("%f",&p1->score);
printf("addr:");
scanf("%s",p1->addr);
if(!n){
n++;
head=p1;
}else{
p2->next=p1;
p2=p1;
}
printf("whether input next:yes/no\n");
scanf("%s",i);
if(!strncmp(i,"y",1)){
p1=(Stu *)malloc(sizeof(Stu));
}else{
p1->next = NULL;
}
}while(!strncmp(i,"y",1));
return head;
}
/* 添加學生信息 */
Stu *add(Stu *p)
{
Stu *q,*head;
head = p;
char i[4];
while(p->next != NULL){
p=p->next;
}
q=(Stu *) malloc(sizeof(Stu));
do{
printf("please add student info:\n");
printf("name:");
scanf("%s",q->name);
getchar();
printf("sex:");
scanf("%c",&q->sex);
printf("num:");
scanf("%d",&q->num);
printf("score:");
scanf("%f",&q->score);
printf("addr:");
scanf("%s",q->addr);
p->next = q;
p=q;
printf("whether add next:yes/no\n");
scanf("%s",i);
if(!strncmp(i,"y",1)){
q=(Stu *) malloc(sizeof(Stu));
}else{
q->next= NULL;
}
}while(!strncmp(i,"y",1));
return head;
}
/* 刪除學生信息 */
Stu *delet(Stu *p)
{
Stu *q,*head;
int Num;
char i[4];
head = q= p;
if(!p)
return head;
do{
printf("please input delete student num:");
scanf("%d",&Num);
while(p->num !=Num){
if(p->next!=NULL){
if(q!=p){
q->next=p;
q=p;
}
p=p->next;
}else{
printf("No find the student,sorry!\n");
return head;
}
}
if(p==head){
head=p->next;
}else if(p->next ==NULL){
q->next=NULL;
}else{
q->next=p->next;
}
free(p);
printf("whether delete again:yes/no?\n");
scanf("%s",i);
}while(!strncmp(i,"y",1));
return head;
}
/* 修改學生信息 */
Stu *modify(Stu *p)
{
Stu *head;
char i[4];
int Num,y;
head=p;
printf("please modify student num:");
scanf("%d",&Num);
do{
while(p->num!= Num){
if(p->next!=NULL){
p=p->next;
}else{
printf("No find the student,sorry!\n");
return head;
}
}
printf("Do you want to modify 1.name 2.num 3.sex 4.score 5.addr?");
scanf("%d",&y);
switch(y){
case 1:printf("name:"); scanf("%s",p->name);break;
case 2:printf("num:"); scanf("%d",&p->num);break;
case 3:printf("sex:"); scanf("%c",&p->sex);break;
case 4:printf("score:"); scanf("%f",&p->score);break;
case 5:printf("addr:"); scanf("%s",p->addr);break;
default:printf("input error!\n");break;
}
printf("whether modify again:yes/no?\n");
scanf("%s",i);
}while(!strncmp(i,"y",1));
return head;
}
/* 查詢學生信息 */
void query(Stu *p)
{
int Num;
printf("Please input student num:");
scanf("%d",&Num);
while(p->num != Num){
if(p->next == NULL){
printf("No find the student ,sorry!\n");
exit(-1);
}
p= p->next;
}
printf("name=%s ,sex=%c ,score=%4.2f ,addr=%s\n",p->name,p->sex,p->score,p->addr);
}
/* 賬號登錄 */
int login(void)
{
int i=0;
char wel[]="Welcome to entery the student system!";
int len=sizeof(wel);
char account_new[16],account[]="class_student";
char passwd_new[16],passwd[]="123456";
printf("defaule:: 賬號:class_student 密碼:123456\n");
printf("if error 3 times exit\n");
for(i=0;i<3;i++){
printf("please input your 賬號:");
scanf("%s",account_new);
printf("please input your 密碼:");
scanf("%s",passwd_new);
if((!strncmp(account,account_new,strlen(account))) &&
(!strncmp(passwd,passwd_new,strlen(passwd)))) {
printf("succeeful!\n");
break;
}else{
if(i==2)
return -1;
printf("error!\n");
}
}
printf("%s",wel);
printf("\n");
return 0;
}
/* 信息打印 */
void print(Stu *p)
{
if(!p)
return;
do{
printf("name:%s ,sex:%c ,num:%d , score:%4.2f ,addr:%s \n",p->name,p->sex,p->num,p->score,p->addr);
p=p->next;
}while(p != NULL);
}
復制代碼
51hei.png
(5.68 KB, 下載次數: 99)
下載附件
2021-1-12 23:28 上傳
所有資料51hei提供下載:
c語言之單鏈表.zip
(7.48 KB, 下載次數: 18)
2021-1-12 22:46 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
IdeaMing
時間:
2021-1-13 12:51
有沒有循環鏈表?
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1