本文目錄一覽:
- 1、C語言成績管理系統刪除信息
- 2、求c語言 學生管理系統 程序 以下幾個模塊不必全有,少的我自己加,但發來的程序各模塊必須標記清楚 謝謝
- 3、我用C語言寫了一個學生管理系統,就是刪除功能不知如何編寫,想問問如何實現對結構體數組其中的一項清空?
- 4、用c語言編寫學生管理系統時如何實現對學生信息的刪除操作???
C語言成績管理系統刪除信息
void remove(MESSAGE message[]) {
int i,j,n,num;
int flag = 1;
n = ReadMESSAGEFromFILE(message);
printf(“請輸入要刪除學生的學號:”);
scanf(“%d”,num);
for(i = 0; i n;i++) {
if(num == message[i].number) {
for(j = i; j n – 1; ++j)
message[i] = message[i + 1];
printf(“該學生的信息已刪除成功!\n”);
flag = 0;
–n;
break;
}
}
if(flag == 1) printf(“該學生的信息不存在。\n”);
WriteAllMESSAGEtoFILE(message,n);
}
求c語言 學生管理系統 程序 以下幾個模塊不必全有,少的我自己加,但發來的程序各模塊必須標記清楚 謝謝
下面的程序中,你將單鏈表改為結構數組即可達到你的要求:
C 語言學生成績管理系統
#includestdio.h
#includemalloc.h
#includeconio.h
#includestring.h
typedef struct STUDENT
{
char studentNumber[20];/*學生學號*/
char studentName[20];/*學生姓名*/
char className[20];/*班級名稱*/
float mark1;/*第1門成績*/
float mark2;/*第2門成績*/
float mark3;/*第3門成績*/
struct STUDENT *next;
}STUDENT;
STUDENT *headLink; /*鏈表表頭指針*/
/*函數聲明*/
void ReadInfoFormFile();
void Menu();
void CreateHeadLink();
STUDENT *MallocNode();
void GetInformation(STUDENT *t);
void OutputInformation();
void DesplayInfoBystudentName();
void DesplayInfoBystudentNumber();
void DesplayOneNode(STUDENT *t);
void InsertOneNode(STUDENT *t);
void DeleteNodeBystudentNumber();
void ChangeMarkByName();
void ChangeMarkByNumber();
void SaveLinkToFile();
void paixu();
void DesplayMarkSegment();
int choose;/*用於接受用戶的選擇*/
/*主函數*/
main()
{
system(“color 2a”);
printf(“\n\t\t歡迎進入***學院***班學生成績管理系統\n\n\n”);
printf(“\t\t\t\tO(∩_∩)O\n\n\n\n”);
printf(“\t\t\t^_^\t\t\t^_^\n\n”);
printf(“\n\t\t 注意:請按照要求輸入相應信息,謝謝!\n\n\n\n\n”);
printf(“\t\t\t\t\t\t\t\t製作人:***\n\n\n”);
printf(“\t\t\t 按任意鍵進入…………”);
getch();
system(“cls”);
CreateHeadLink();
ReadInfoFormFile();
Menu();
}
/*從文件中讀學生信息到鏈表中*/
void ReadInfoFormFile(void)
{
FILE *fp;
STUDENT *p;
fp=fopen(“student.txt”,”r”);
if(!fp)
{
printf(“\n”);
return;
}
p=MallocNode();
while(fscanf(fp,”%s%s%s%f%f%f”,p-studentNumber,p-studentName,p-className,(p-mark1),(p-mark2),(p-mark3))0)
{
InsertOneNode(p);
p=MallocNode();
}
fclose(fp);
}
/*顯示菜單,根據用戶的輸入完成相應的功能*/
void Menu(void)
{
STUDENT *p;
printf(“\t\t (^o^)歡迎使用學生成績管理系統(^o^)\n\n”);
printf(“\t ※——————–請選擇相應功能———————※\n\n”);
printf(“\t 1: 顯示所有學生的信息 |”);
printf(” \t 2: 按姓名查詢 |\n\n”);
printf(“\t 3: 按學號查詢 |”);
printf(” \t\t 4: 增加學生 |\n\n”);
printf(“\t 5: 刪除學生 |”);
printf(” \t\t 6: 按姓名修改學生成績 |\n\n”);
printf(“\t 7: 按學號修改學生成績 |”);
printf(” \t 8: 保存所有學生信息 |\n\n”);
printf(“\t 9: 按成績輸出學生信息 |”);
printf(“\t 10: 顯示不及格及優秀學生 |\n\n”);
printf(“\t 11: 返回主菜單 |”);
printf(“\t\t 12: 退出 |\n\n”);
printf(“\t ※———————-O(∩_∩)O————————※\n\n”);
printf(“\t 請輸入對應數字:”);
scanf(“%d”,choose);/*取得用戶的選擇*/
switch(choose)
{
case 1:system(“cls”);
OutputInformation();/*顯示所有學生的信息*/
break;
case 2: system(“cls”);
DesplayInfoBystudentName();
break;
case 3: system(“cls”);
DesplayInfoBystudentNumber();/*根據用戶輸入的學號顯示該學生的信息*/
break;
case 4: system(“cls”);
p=MallocNode();/*先申請一個新結點*/
GetInformation(p);/*要求用戶輸入信息到新結點中*/
InsertOneNode(p);/*將新結點加到鏈表中*/
break;
case 5: system(“cls”);
DeleteNodeBystudentNumber();/*根據用戶輸入的學號刪除該學生*/
break;
case 6: system(“cls”);
ChangeMarkByName();/*根據用戶輸入的姓名修改學生成績*/
break;
case 7: system(“cls”);
ChangeMarkByNumber();/*根據用戶輸入的學號修改學生成績*/
break;
case 8: system(“cls”);
SaveLinkToFile();/*保存數據*/
break;
case 9: system(“cls”);
paixu();break;
case 10: system(“cls”);
DesplayMarkSegment();break;
case 11: system(“cls”);
break;
case 12: system(“cls”);
SaveLinkToFile();/*保存數據後再退出*/
free(headLink);
exit(1);
break;
default: system(“cls”); break;
}
Menu();/*遞歸調用*/
}
/*建立鏈表表頭*/
void CreateHeadLink(void)
{
STUDENT *p;
p=(STUDENT*)malloc(sizeof(STUDENT));
headLink=p;
p-next=NULL;
}
/*申請一個新結點,並將其初始化*/
STUDENT *MallocNode(void)
{
STUDENT *p;
int i;
p=(STUDENT*)malloc(sizeof(STUDENT));
if(p==NULL)
return NULL;
for(i=0;i10;i++)
p-studentNumber=’\0′;
for(i=0;i20;i++)
p-studentName=’\0′;
for(i=0;i20;i++)
p-className=’\0′;
p-mark1=0.0;
p-mark2=0.0;
p-mark3=0.0;
p-next=NULL;
return p;
}
/*取得用戶輸入的學生信息*/
void GetInformation(STUDENT *t)
{
printf(“請輸入學生學號:”);
scanf(“%s”,t-studentNumber);
printf(“請輸入學生姓名:”);
scanf(“%s”,t-studentName);
printf(“請輸入該生所在班級:”);
scanf(“%s”,t-className);
printf(“請輸入第1門成績:”);
scanf(“%f”,(t-mark1));
printf(“請輸入第2門成績:”);
scanf(“%f”,(t-mark2));
printf(“請輸入第3門成績:”);
scanf(“%f”,(t-mark3));
}
/*在鏈表的結尾處增加一個結點*/
void InsertOneNode(STUDENT *t)
{
STUDENT *p;
p=headLink;
while(p-next)
{
p=p-next;
}
p-next=t;
}
/*根據用戶輸入的學生姓名顯示該學生的信息*/
void DesplayInfoBystudentName(void)
{
STUDENT *p;
char studentName[20];
char flag=0;
p=headLink-next;
printf(“請輸入學生姓名:”);
scanf(“%s”,studentName);
while(p)
{
if(strcmp(p-studentName,studentName)==0)
{system(“cls”);
printf(“\t學號\t姓名\t班級\t成績1\t成績2\t成績3\t總成績\t平均成績\n”);
DesplayOneNode(p);
flag=1;
break;
}
p=p-next;
}
if(!flag) {system(“cls”);
printf(“\t 對不起,不存在姓名為 %s 的學生\n”,studentName);}
}
/*根據用戶輸入的學號顯示該學生的信息*/
void DesplayInfoBystudentNumber(void)
{
STUDENT *p;
char studentNumber[20];
char flag=0;
p=headLink-next;
printf(“請輸入學生學號:”);
scanf(“%s”,studentNumber);
while(p)
{
if(strcmp(p-studentNumber,studentNumber)==0)
{ system(“cls”);
printf(“\t學號\t姓名\t班級\t成績1\t成績2\t成績3\t總成績\t平均成績\n”);
DesplayOneNode(p);
flag=1;
break;
}
p=p-next;
}
if(!flag) {system(“cls”);
printf(“\t 對不起,不存在學號為 %s 的學生\n”,studentNumber);
}}
/*輸出一個結點的信息*/
void DesplayOneNode(STUDENT *t)
{
printf(“\t%s\t”,t-studentNumber);
printf(“%s\t”,t-studentName);
printf(“%s\t”,t-className);
printf(“%.2f\t”,t-mark1);
printf(“%.2f\t”,t-mark2);
printf(“%.2f\t”,t-mark3);
printf(“%.2f\t”,t-mark1+t-mark2+t-mark3);
printf(“%.2f\t\n”,(t-mark1+t-mark2+t-mark3)/3);
}
/*根據用戶輸入的學號刪除該學生*/
void DeleteNodeBystudentNumber(void)
{
char studentNumber[10];
STUDENT *p,*q;
char flag=0;
printf(“請輸入要刪除的學生學號:”);
scanf(“%s”,studentNumber);
p=headLink;
q=headLink-next;
while(q)
{
if(strcmp(q-studentNumber,studentNumber)==0)
{
p-next=q-next;
free(q);
flag=1;
break;
}
p=p-next;
q=q-next;
}
if(!flag)
{ system(“cls”);
printf(“\t 不存在該學號的學生\n”);
return;
}
system(“cls”);
printf(“\t 成功刪除\n”);
}
/*顯示所有學生的信息*/
void OutputInformation(void)
{
STUDENT *p;
p=headLink-next;
if(p==NULL)
{
printf(“\t 現在沒有學生信息,請先輸入學生信息\n\n”);
return;
}
printf(“\t學號\t姓名\t班級\t成績1\t成績2\t成績3\t總成績\t平均成績\n”);
while(p)
{
DesplayOneNode(p);
p=p-next;
}
}
/*根據輸入的姓名修改成績*/
void ChangeMarkByName(void)
{
STUDENT *p;
char studentName[20];
char flag=0;
float mark1,mark2,mark3;
p=headLink-next;
printf(“請輸入學生姓名:”);
scanf(“%s”,studentName);
while(p)
{
if(strcmp(p-studentName,studentName)==0)
{
printf(“請輸入新的第1門成績:\n”);
scanf(“%f”,mark1);
printf(“請輸入新的第2門成績:\n”);
scanf(“%f”,mark2);
printf(“請輸入新的第3門成績:\n”);
scanf(“%f”,mark3);
p-mark1=mark1;
p-mark2=mark2;
p-mark3=mark3;
flag=1;
printf(“修改成功\n”);
break;
}
p=p-next;
}
if(!flag) {system(“cls”);
printf(“\t 對不起,不存在姓名為 %s 的學生\n”,studentName);
} }
/*根據輸入的姓名修改成績*/
void ChangeMarkByNumber(void)
{
STUDENT *p;
char studentNumber[20];
char flag=0;
float mark1,mark2,mark3;
p=headLink-next;
printf(“請輸入學生學號:”);
scanf(“%s”,studentNumber);
while(p)
{
if(strcmp(p-studentNumber,studentNumber)==0)
{
printf(“請輸入新的第1門成績:\n”);
scanf(“%f”,mark1);
printf(“請輸入新的第2門成績:\n”);
scanf(“%f”,mark2);
printf(“請輸入新的第3門成績:\n”);
scanf(“%f”,mark3);
p-mark1=mark1;
p-mark2=mark2;
p-mark3=mark3;
flag=1;
printf(“修改成功\n”);
break;
}
p=p-next;
}
if(!flag){system(“cls”);
printf(“\t 對不起,不存在學號為 %s 的學生\n”,studentNumber);
}}
/*保存鏈表數據到文件中*/
void SaveLinkToFile(void)
{
STUDENT *p;
FILE *fp;
p=headLink-next;
if(p==NULL)
{
printf(“\t 現在沒有學生信息,請先輸入學生信息\n\n”);
return;
}
fp=fopen(“student.txt”,”w+”);
if(!fp)
{
printf(“文件不存在\n”);
return;
}
while(p)
{
fprintf(fp,”%s %s %s %f %f %f\n”,p-studentNumber,p-studentName,p-className,p-mark1,p-mark2,p-mark3);
p=p-next;
}
fclose(fp);
}
/*顯示優秀和不及格學生成績*/
void DesplayMarkSegment(void)
{
STUDENT *p;
int count=0;
p=headLink-next;
printf(“\t60分以下(不及格)的學生成績如下:\n”);
printf(“\t學號\t姓名\t班級\t成績1\t成績2\t成績3\t總成績\t平均成績\n\n”);
while(p)
{
if((6((int)(p-mark1/10)))||(6((int)(p-mark2/10)))||(6((int)(p-mark3/10))))/*只要有一科不及格就認為該生不及格*/
{
count++;
DesplayOneNode(p);
}
p=p-next;
}
printf(“\t不及格的學生一共有%d人\n”,count);
p=headLink-next;
printf(“\t成績優秀的學生成績如下:\n”);
printf(“\t學號\t姓名\t班級\t成績1\t成績2\t成績3\t總成績\t平均成績\n\n”);
count=0;
while(p)
{
if((8=((int)(p-mark1/10)))(8=((int)(p-mark2/10)))(8=((int)(p-mark3/10))))
{
count++;
DesplayOneNode(p);
}
p=p-next;
}
printf(“\t成績優秀的學生一共有%d人\n”,count);
}
/*按總成績排序*/
void paixu(void)
{
STUDENT exchange,*r,*p,*q;
r=headLink-next;
if(r==NULL)
{
printf(“\t 現在還沒學生信息,請先輸入學生信息\n”);
return;
}
while(r)/*兩層while循環實現排序*/
{
p=r;
q=r-next;
while(q)
{
if((q-mark1+q-mark2+q-mark3)(p-mark1+p-mark2+p-mark3))
{
strcpy(exchange.studentNumber,q-studentNumber);/*先複製q結點信息到exchange*/
strcpy(exchange.studentName,q-studentName);
strcpy(exchange.className,q-className);
exchange.mark1=q-mark1;
exchange.mark2=q-mark2;
exchange.mark3=q-mark3;
strcpy(q-studentNumber,p-studentNumber);/*再複製p結點信息到q*/
strcpy(q-studentName,p-studentName);
strcpy(q-className,p-className);
q-mark1=p-mark1;
q-mark2=p-mark3;
q-mark3=p-mark3;
strcpy(p-studentNumber,exchange.studentNumber);/*最後複製exchange結點信息到p*/
strcpy(p-studentName,exchange.studentName);
strcpy(p-className,exchange.className);
p-mark1=exchange.mark1;
p-mark2=exchange.mark2;
p-mark3=exchange.mark3;
}
q=q-next;
}
r=r-next;
}
OutputInformation();
}
我用C語言寫了一個學生管理系統,就是刪除功能不知如何編寫,想問問如何實現對結構體數組其中的一項清空?
很簡單。
假設你定義的結構體數組大小為MaxSize=1000,你可以定義一個當前數組中的學生數Size,
該數值隨著錄入的學生信息的多少而變化。
現在假設數組中有500個學生的信息,也即Size=500;你需要刪除其中一個學生的資料。
通過查找你得到這個學生的信息存儲在第100號結構中,
那麼你將101號的學生的信息覆蓋到100號結構中(例如:student[99]=student[100]),再將102號的學生的信息複製到101號結構中,依次複製,直到將500號結構中的學生信息複製到499號結構中。然後改寫Size=499。
上面的複製過程可以通過一個for循環來實現,100號之前的結構都不用動。
這樣,當前學生結構數組中就少了原來100號結構中的學生信息,也就是刪除掉了。
用c語言編寫學生管理系統時如何實現對學生信息的刪除操作???
遍歷所有學生信息。(可以按學號查詢)
刪除指定的學生信息。
將剩餘的信息重新寫入到文件中。
可以加群討論,IT交流群 278697954。
原創文章,作者:VXIY,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/135111.html