c语言课程设计--图书/音乐管理系统
这个代码因为配置信息的原因不能直接整个拿去用(o゜▽゜)o☆
这个代码因为配置信息的原因不能直接整个拿去用(o゜▽゜)o☆
这个代码因为配置信息的原因不能直接整个拿去用(o゜▽゜)o☆
只能提供一个思路(其实也可以把里面函数拿去用)ˋ( ° ▽、° )
(ง •_•)ง
这个小系统包含一些除任务要求外额外附加的功能
本来做出来差不多是这个效果基本上来说比任务要求多加了:
{ 1.导入音乐文件并播放;2简单的图形化界面;3.模糊查询功能;}
所有信息的显示与输入都是在dos窗口完成,图形界面实质只是提供了更加便利调用函数的方式(伪图形化操作)ˋ( ° ▽、° )
(纳个suprise其实就是随机播放一首导入的音乐。)
当时使用codeblocks(现在早就转VS) Win32 GUI project 项目加上制作图形的插件。
因为时间较长,只记得当时这个软件配置比较麻烦。。就在这只分享一些源码。
首先文件总体分为三部分(因为用到了这个图形化界面所以多出了main.cpp)
简单说一下程序的逻辑:开启程序 --> 读取磁盘上的配置文件以检测是否是第一次使用该系统以跳转不同管理模式 --> 第一次使用要求设置密码或者限制一些权限。
创建链表并从文件读取信息(其实这部没有必要,之间对文件进行操作即可,没必要单独创建链表把文件中的信息挂载上来)
接下来就是一些查删改等基础操作
先介绍核心部分 ——resource.cpp
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include<stdio.h>
#include"resource.h"
#include<stdbool.h>
#include <windows.h>
#include<io.h> extern int N1; // 虚拟音乐信息数目
extern int N2; // 音乐文件数目//不超过10个
char add[][]={};// 音乐文件地址
FILE *file1;// 内置默认文件 //moren.txt
FILE *file2;// 用户更改的信息库//data.txt
extern char code[];// 记录密码
extern MUSIC *head;
extern bool FFLAG;//FFLAG 是否第一次使用该系统
extern bool FLAG;//FLAG 是否拥有管理员权限
extern FILE *fp;
MUSIC *nowlist;// 链表最后一个节点
MUSIC *now;// 在链表中移动的节点
void print_help(void)// 帮助按钮
{
printf("请通过按钮选择你所需要的功能\n"
"ps: 1.第一次使用,请先初始化并刷新音乐库\n"
" 2.若要播放音乐,请先刷新音乐库\n"
" 4.通过CLEAR按键清除屏幕\n"
" 3.若要退出系统请先关闭图形化窗口,不要直接关闭dos窗口\n");
} void Scanf(MUSIC *now)// 读取MUSIC
{
scanf("%d%s%s%s",&canshu);
}
void Printf(MUSIC *now)// 打印MUSIC
{
printf("%7d%10s%10s%10s\n",canshu);
}
void Fscanf(MUSIC *now,FILE *nowf)// 从文件中获取信息
{
fscanf(nowf,"%d%s%s%s",&canshu);
}
void Fprint(MUSIC *now,FILE *nowf)// 将输入的信息保存到文件中
{
fprintf(nowf,"%d %s %s %s ",canshu);
}
void Fprint1(MUSIC *now,FILE *nowf)// 将输入的信息保存到文件中
{
fprintf(nowf,"%d %s %s %s\n",canshu);
}
void chushihua1(void)// 预置信息
{
printf("第一次使用,请先设置密码\n");
setcode();
CreatList(head,,);
}
void chushihua(void)// 初始化按键功能
{
if(FFLAG==true)printf("你还没有管理员权限,请先登录\n");
else{chushihua1();return;}
if(FLAG)//如果有权限
{
fp=fopen("C:\\Users\\EA\\Desktop\\date.txt","w");
chushihua1();
fclose(fp);
}
else printf("你还没有管理员权限,请先登录\n");
}
void setcode(void)// 设置密码
{
scanf("%s",code);
printf("密码设置成功!!\n");
}
void onling(void)// 管理员登陆
{
char nowcode[]={};
printf("请输入密码\n");
scanf("%10s",nowcode);
while(!Strcmp(code,nowcode,strlen(code),strlen(nowcode)))
{////如果密码正确
printf("密码错误,请再次输入"
"若取消登陆,请输入Q\n");
memset(nowcode,,sizeof(nowcode));
scanf("%s",nowcode);
if(*nowcode=='Q'&&strlen(nowcode)==)break;//如果用户选择退出
}
if(strlen(nowcode)!=){printf("登陆成功\n");FLAG=true;}
}
int Strcmp(const char *x,const char *y,int n,int m)// 密码比较
{
int i=;
if(n!=m)return ;
while(*x==*y&&*x&&*y){i++;x++;y++;}
if(i==m)return ;
return ;
}
void play_sound(void)// 随机播放音乐
{
srand(time(NULL));
PlaySound(TEXT(add[rand()%N2]),NULL, SND_ASYNC | SND_NODEFAULT);
}
void CreatList(MUSIC *head,int n,int m)// 创建链表,并保存数据
{
N1+=n;// 虚拟信息数目
int i = ;// 当m==0初始化读取预置信息,否则创建新的节点
if(m==){file1=fopen("C:\\Users\\EA\\Desktop\\moren.txt","r");nowlist = (MUSIC*)head;}
else{nowlist->next = (MUSIC *)malloc(sizeof(MUSIC));nowlist=nowlist->next;}
for(i=; i<n; i++)
{
if(m==)Fscanf(nowlist,file1);//从预置信息文件读取信息
else Scanf(nowlist);
if(i<n-)// 当节点数量小于所需数量
{
nowlist ->next =(MUSIC *)malloc(sizeof(MUSIC));
nowlist = nowlist ->next;
}
}
nowlist->next=NULL;
if(m==)fclose(file1);
//fclose(file2);
}
void load_music_info(void)// 在链表后加入新节点
{
int n=;
printf("请输入你想要导入音乐信息的数量:");
scanf("%d",&n);
printf("请按以下格式输入信息:\n"
"0001 musicname singer album\n");
CreatList(nowlist,n,);
} void search_actual(int x)// 寻找真实具有的音乐
{
N2=;// 将文件数目初始化为0
long hand;
struct _finddata_t fileinfo;
int i=;
char fileadd[]="C:\\Users\\EA\\Music\\shili\\";//在该文件下搜索
char fileformat[]="*.wav";// 搜索该格式文件
char name[];
strcpy(name,fileadd);
strcat(name,fileformat);
hand=_findfirst(name,&fileinfo);
if(hand!=-1L)
{
if(x!=)printf("音乐库有以下音乐文件:\n");
do
{
strcpy(name,fileadd);
strcat(name,fileinfo.name);
if(x!=)printf("%s\n",fileinfo.name);
strcpy(add[i++],name);// 把音乐文件路径保存下来
N2++;// 如果扫描到一个,则真实文件数目加1
}while(_findnext(hand,&fileinfo)==);
}
// if(x!=0)else{printf("no sereach !!!\n");}
for(i=; i<N2; i++)abss(add[i],add[i]);
}
void abss(char *x,char*z)// 转化成绝对地址
{
int k=;
char b[] = {};
for(; (*x)!=; x++,k++)
{
if((*x)!='\\')b[k]=*x;
else{b[k++]='\\';b[k]='\\';}
}
b[k]=;strcpy(z,b);
} void chudu(void)// 从系统文件加载信息
{
file2=fopen("C:\\Users\\EA\\Desktop\\date.txt","r");
int i = ;
MUSIC *nowlist = (MUSIC*)head;// 把磁盘信息导入到链表中
for(i=; i<N1; i++)
{
Fscanf(nowlist,file2);
if(i<N1-)
{
nowlist ->next =(MUSIC *)malloc(sizeof(MUSIC));
nowlist = nowlist ->next;
}
}
nowlist->next=NULL;
fclose(file2);
}
void view_all(void)// 显示所有链表信息
{
printf("共有%d条音乐信息!!\n",N1);
now = (MUSIC *)head;
while(now)
{
printf("%04d%12s%12s%12s\n",canshu);
now = now->next;
}
}
void revise(void)// 修改音乐信息
{
int n;
int m=;
printf("请输入你想要修改的音乐编号;");
scanf("%d",&n);
now = (MUSIC *)head;
while(now)
{
if(now->next->number==n)
{
printf("请输入更改后的信息;\n");
Scanf(now->next);m=;break;
}
now = now->next;
}
if(m==)printf("no search!!\n");
else printf("修改成功!!\n");
}
int searchname(int x,int y)// 系列查找
{
int i=;
int m=;
char name1[]={};
if(x==)printf("请输入你想要查询的歌手:");
else
{
if(y==)printf("请输入你想要播放的音乐名:");
else printf("请输入你想要查询的音乐名:");
}
scanf("%s",name1);
now = (MUSIC *)head;
while(now)
{
if(x==)
{if(Strcmp(now->S_N,name1,strlen(now->S_N),strlen(name1)))
{Printf(now);m=;break;}}
else
{
if(Strcmp(now->M_N,name1,strlen(now->M_N),strlen(name1)))
{Printf(now);m=;if(y==)return i;break;}//当x==0,y==1,返回查找所要播放音乐文件的地址下标
}
now = now->next;
i++;
}
if(m==)printf("no search!!\n");
return -;
}
void play(void)// 输入音乐名播放音乐
{
int i=-;
i = searchname(,);
if(i!=-){printf("请欣赏!!\n");PlaySound(TEXT(add[i]),NULL, SND_ASYNC | SND_NODEFAULT);}
}
void searchkey(void)// 关键字查找
{
int i=;
int m=;
char name1[]={};
printf("请输入你想查找的关键字:");
scanf("%s",name1);
now = (MUSIC *)head;
while(now)
{
if(strstr(now->M_N,name1)||strstr(now->S_N,name1))
{Printf(now);i++;m=;}
now = now->next;
}
printf("共找到了%d条相关信息!!\n",i);
if(m==)printf("未找到\n");
} void wenjian(void)
{
printf("请把音乐文件放入C:\\Users\\EA\\Music\\shili\n");
printf("请按以下格式输入你导入音乐信息:\n"
"0001 musicname singer album\n");
charu();// 在真实音乐文件信息后插入
}
void charu(int x)
{
now = (MUSIC*)head;
MUSIC *nowlist2 = (MUSIC*)malloc(sizeof(MUSIC));// 要插入的节点信息
int i=;
if(x==)for(i=; i<N2-; i++)now=now->next;//在预置音乐后插入真实音乐文件信息
else
{
int n;
printf("请输入你想要插入的位置:");
scanf("%d",&n);
if(n<N2){printf("前%d个为系统预置,不能插入!!\n",N2);return;}
for(i=; i<n-; i++)now=now->next;
printf("请输入音乐信息:\n"); }
Scanf(nowlist2);
nowlist2 ->next = now->next;
now ->next = nowlist2;
if(x==)
{
file1=fopen("C:\\Users\\EA\\Desktop\\moren.txt","a+");
fprintf(file1,"%04d %s %s %s\n",nowlist2->number,nowlist2->M_N,nowlist2->S_N,nowlist2->album);
fclose(file1);
}
if(x!=){N1++;printf("插入成功!!\n");}
if(x==)printf("保存成功!!\n");
if(x==)search_actual();
}
void sc(void)
{
int m=;
now = (MUSIC*)head;
MUSIC *nowlist2;
int num;
printf("请输入你要删除音乐的编号:");
scanf("%d",&num);
if(num<=N2){printf("预置音乐无法删除!!\n");return;}
while(now)
{
if(now->next->number==num)
{
nowlist2 = now->next;
now->next = nowlist2->next;
free(nowlist2);m=;
break;
}
now = now->next;
}
if(m==)printf("删除成功!!\n");
else printf("no search!!\n");
}
void baocun(void)
{
file2=fopen("C:\\Users\\EA\\Desktop\\date.txt","w");
now = (MUSIC*)head;
N1=;
while(now)
{
N1++;//音乐信息文件++
Fprint(now,file2);
now = now->next;
}
fclose(file2);
}
void px(void)// 排序
{
//先把所有信息放在数组上,再对数组进行排序,再把信息返回链表
int i=;
int j=;
MUSIC a[N1];
now = (MUSIC*)head;
while(now)
{a[i].number = now->number;
strcpy(a[i].M_N,now->M_N);
strcpy(a[i].S_N,now->S_N);
strcpy(a[i].album,now->album);
now=now->next;i++;}
int minnum;
int mins;
now = (MUSIC*)head;
MUSIC temp;
for(i=; i<N1; i++)// 选择排序
{
minnum=a[i].number;
mins = i;
for(j=i; j<N1; j++)
{if(a[j].number<minnum)
{minnum = a[j].number;mins = j;}}
if(i!=mins)//MUSIC类型变量交换
{
sscp(&temp,&a[mins]);
sscp(&a[mins],&a[i]);
sscp(&a[i],&temp);
}
if(i>=N2)//对除预置信息外的音乐排序
{
now->number=a[i].number;
strcpy(now->M_N,a[i].M_N);
strcpy(now->S_N,a[i].S_N);
strcpy(now->album,a[i].album);
}
now=now->next;
}
}
void sscp(MUSIC *x,MUSIC *y)// MUSCI类型赋值
{
x->number = y->number;
strcpy(x->M_N,y->M_N);
strcpy(x->S_N,y->M_N);
strcpy(x->album,y->M_N);
}
resource.cpp
因为用到了查找磁盘上音乐文件,所以可能要用到c++函数(时间长了不确定了)
接下来是头文件——里面包含了一些按钮的定义是图形化插件主动创建的,这些按钮将在main.cpp检测是否点击按钮
#ifndef IDC_STATIC
#define IDC_STATIC (-1)
#define canshu now->number,now->M_N,now->S_N,now->album typedef struct MUSIC
{
int number;// 编号
char M_N[];// 歌曲名
char S_N[];// 歌唱者
char album[];// 专辑
struct MUSIC *next;
}MUSIC;
int Strcmp(const char *,const char *,int ,int );// 核对密码 //前两个字符串。后两个字符串长度
void setcode(void);// 设置密码
void chushihua(void);// 系统初始化
void chushihua1(void);// 导入预存歌曲信息
void Printf(MUSIC *);// 将信息打印
void Fprint(MUSIC *,FILE *);// 将信息保存到文件中
void Scanf(MUSIC *);// 从键盘获取成员信息
void Fscanf(MUSIC *,FILE *);// 从文件获取成员信息
void onling(void);// 登陆
void print_help(void);// 打印帮助信息
void CreatList(MUSIC *,int n,int m);// 创建链表 //n:创建的链表数,m==0,导入默认信息,m==1,加入新的节点
void play_sound(void);// 播放音乐
void abss(char *,char*);// 转化绝对地址
void search_actual(int);// 查看真实存在的音乐
void load_music_info(void);// 录入音乐信息
void view_all(void);// 显示所有音乐信息
void revise(void);// 修改音乐信息
int searchname(int x,int y);// 系列查询 //当x==1查询歌手,否则{当y==1时寻找要播放的音乐名,否则查询音乐名}
void searchkey(void);// 模糊查找
void play(void);// 播放音乐
void chudu(void);// 从文件中读取数据
void baocun(void);// 保存数据到文件
void charu(int x);// 插入音乐信息 //当x==1时导入真实音乐信息,否则插入虚拟信息
void wenjian(void);// 导入音乐文件
void sscp(MUSIC *x,MUSIC *y);// MUSIC类型赋值
void px(void);// 排序
void sc(void);// 删除音乐信息 #endif #define DLG_MAIN 100
#define daoruxinxi 40000
#define search_singer 40001
#define Surprise 40002
#define On 40003
#define Off 40004
#define search_key 40005
#define INITIALISE 40006
#define daoruwenjian 40007
#define xiugaixinxi 40008
#define onlin 40009
#define CLEAR 40010
#define HELP 40011
#define settcode 40012
#define bofangyinyue 40013
#define shuaxin 40014
#define search_name 40015
#define xianshixinxi 40016
#define charuxinxi 40018
#define paixu 40019
#define shanchuxinxi 40020
recourse.h
最后就是一个Win32 GUI project的框架
主要是检测按钮是否被按下以调用对应函数
#include <windows.h>
#include <commctrl.h>
#include <stdio.h>
#include <windef.h>
#include "resource.h"
#include <mmsystem.h>
int N1=;// 虚拟文件数目
int N2=;// 真实文件数目
bool FFLAG = false;// 是否第一次使用系统(有没有创建数据文件)
bool FLAG= false;// 是否具有管理员权限
FILE *fp;// 配置信息文件
char code[];// 保存密码
MUSIC *head = (MUSIC *)malloc(sizeof(MUSIC));
HINSTANCE hInst;
BOOL CALLBACK DlgMain(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ switch(uMsg)
{
case WM_INITDIALOG:
{
printf("欢迎使用歌曲管理系统!!\n");
search_actual();
if((fp=fopen("C:\\Users\\EA\\Desktop\\setting.txt","r"))==NULL)
{FFLAG = ;printf("您是第一次使用本系统,请先初始化。\n");}
else
{fscanf(fp,"%s%d%d",code,&N1,&N2);chudu();fclose(fp);}//从配置文件读取信息
}
return TRUE; case WM_CLOSE:
{
EndDialog(hwndDlg, );
baocun();// 则保存链表信息到文件
fp=fopen("C:\\Users\\EA\\Desktop\\setting.txt","w");
fprintf(fp,"%s %d %d",code,N1,N2);//把配置信息保存至文件
fclose(fp);
printf("谢谢你的使用!\n");
}
return TRUE; case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case HELP:// 打印help
{print_help();break;}
case INITIALISE:// 初始化
{chushihua();break;}
case onlin:// 登陆
{onling();break;}
case On:// 随机播放音乐
{play_sound();break;}
case Off:// 关闭音乐
{PlaySound(NULL,NULL,SND_FILENAME);break;}
case Surprise:// 随机播放音乐
{play_sound();break;}
case shuaxin:// 刷新音乐库列表
{search_actual();break;}
case xianshixinxi:// 显示所有音乐信息
{view_all();break;}
case search_name:// 按名称查询
{searchname(,);break;}
case search_singer:// 按歌手查询
{searchname(,);break;}
case search_key:// 关键字查询
{searchkey();break;}
case CLEAR:// 清理屏幕
{system("cls");printf("欢迎使用歌曲管理系统!!\n");break;}
case bofangyinyue:// 选择播放音乐
{play();break;}
case paixu:// 对音乐信息进行排序
{px();break;}
case charuxinxi:// 插入音乐信息
{ if(FLAG)charu();
else printf("你还没有管理员权限,请先登陆\n");
break;
}
case shanchuxinxi:// 删除音乐信息
{
if(FLAG)sc();
else printf("你还没有管理员权限,请先登陆\n");
break;
} case daoruwenjian:// 导入音乐文件
{
if(FLAG)wenjian();
else printf("你还没有管理员权限,请先登陆\n");
break;
}
case xiugaixinxi:// 修改音乐信息
{
if(FLAG)revise();
else printf("你还没有管理员权限,请先登陆\n");
break;
}
case settcode:// 设置密码
{
if(FLAG){printf("请输入你修改后的密码:");setcode();}
else printf("你还没有管理员权限,请先登陆\n");
break;
}
case daoruxinxi:// 加入音乐信息
{
if(FLAG)load_music_info();
else printf("你还没有管理员权限,请先登陆\n");
break;
}
}
}
return TRUE;
}
return FALSE;
} int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
hInst=hInstance;
InitCommonControls();
return DialogBox(hInst, MAKEINTRESOURCE(DLG_MAIN), NULL, (DLGPROC)DlgMain);
}
main.cpp
源文件
链接:https://pan.baidu.com/s/1JHDw9HnoC4VtaUurJRrl3w
提取码:lfmg
复制这段内容后打开百度网盘手机App,操作更方便哦
c语言课程设计--图书/音乐管理系统的更多相关文章
- C语言课程设计—图书管理系统
这是本人大一第二学期初C语言课程设计的作品,嘿嘿,本来以为已经找不到原稿了,今天无意中居然在QQ网络硬盘中找到了当初的teta版,公布于此,以作纪念. C源码例如以下: #include<std ...
- 大一C语言课程设计——班级档案管理系统
记录我在大一第二学期期末做的C语言课程毕业设计 1. 班级档案管理系统运用到的主要结构体 typedef struct birthday //出生日期{int year;int month;int d ...
- 学生管理系统-火车订票系统 c语言课程设计
概要: C 语言课程设计一---学生管理系统 使使用 C 语言实现学生管理系统.系统实现对学生的基本信息和考试成绩的 管理.采用终端命令界面,作为系统的输入输出界面.采用文件作为信息存储介质. 功能描 ...
- C语言课程设计(成绩管理系统)
C语言课程设计(成绩管理系统) 翻到了大学写的C语言课程设计,缅怀一下 内容: 增加学生成绩 查询学生成绩 删除 按照学生成绩进行排序 等 #include <stdio.h> #incl ...
- Java语言课程设计——博客作业教学数据分析系统(201521123107 张翔)
#Java语言课程设计--博客作业教学数据分析系统(个人博客) 1.团队课程设计博客链接 [博客作业教学数据分析系统(From:网络五条狗)](http://www.cnblogs.com/fanta ...
- Java课程设计——学生成绩管理系统(201521123003 董美凤)
Java课程设计--学生成绩管理系统(201521123003 董美凤) 1.团队课程设计博客链接 学生成绩管理系统博客链接 2.个人负责模块或任务说明 信息修改 密码修改 部分界面设计 3.自己的代 ...
- 记C++课程设计--学生信息管理系统
C++课程设计--学生信息管理系统 ...
- C语言课程设计
目录 实现目的 游戏玩法介绍 实现流程与作品架构 任务列表及贡献度 总结感想 作品源码与仓库地址(附页) 资料引用与出处(附页) 实现目的 2048,作为一款极其经典的游戏,从发行到现在,已经有了极多 ...
- Java课程设计—学生成绩管理系统(201521123005 杨雪莹)
一.团队课程设计博客链接 学生成绩管理系统 二.个人负责模块或任务说明 学生成绩录入 显示所有学生信息 显示各科平均成绩 显示学生成绩(按降序排序) 三.自己的代码提交记录截图 四.自己负责模块或任务 ...
随机推荐
- Proto3:Techniques
本文描述处理Protocol Buffer常用到的一些设计模式.你也可以给Protocol Buffers discussion group发送设计或使用问题. 流式多条消息 如果你想将多个消息写入到 ...
- 写在APIO2016之前
时间过得真快.仿佛前天的我还在为联赛的MLE悲伤,昨天的我还在为省选看错题而崩溃,今天就到了APIO的前夜了.虽然明天不是正赛,但我的学弟们都是明天离开.也就是说,我只能为在遥远帝都的他们默默地祈祷了 ...
- jquery关于checkbox复选框是否被选中的问题
本人在项目中需要用到,判断哪些复选框被用户选中.自然而然想到用 if($('').attr('checked') == true) 但是不管有没有选,$('').attr('checked')返回的都 ...
- PS4游戏将登陆PC:一曲属于主机的悲歌
曾经,红白机.PS游戏机等成为一代人难以磨灭的记忆.而随后的索尼PS3.微软Xbox 360.任天堂Wii U等,也称霸了次时代主机时代,成为家庭娱乐的中心.但面对着依托于PC和智能移动终端 ...
- 达拉草201771010105《面向对象程序设计(java)》第十一周学习总结
达拉草201771010105<面向对象程序设计(java)>第十一周学习总结 实验十一 集合 实验时间 2018-11-8 第一部分:理论知识 1.集合(Collection或称为容 ...
- 7-40 jmu-python-统计成绩 (15 分)
输入一批学生成绩,计算平均成绩,并统计不及格学生人数. 输入格式: 每行输入一个数据,输入数据为负数结束输入 输出格式: 平均分=XX,不及格人数=XX,其中XX表示对应数据.如果没有学生数据,输出没 ...
- 01 Taro_Mall 开源多端小程序框架设计
项目介绍 Taro_Mall是一款多端开源在线商城应用程序,后台是基于litemall基础上进行开发,前端采用Taro框架编写,现已全部完成小程序和h5移动端,后续会对APP,淘宝,头条,百度小程序进 ...
- 合并.ts文件 无需软件
cmd 命令直接输入: copy /b D:\temp\*.ts D:\new.ts D盘temp目录的ts文件 合并 并输出到 D盘 new.ts文件
- Postgresql存放数组形式的数据
Postgres 数据库允许把字段定义为可变长度的数组.数据类型既可以是内置类型,也可以是用户自定义的类型或枚举类型. 例如: 创建表 create table demo(name text,subj ...
- 【colab pytorch】使用tensorboardcolab可视化
import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optim from ...